Android Fragment onActivityResult
在Android开发中,Fragment是一种可重用的UI组件,用于构建灵活的用户界面。Fragment可以在Activity中嵌套使用,以实现模块化和可复用的设计。当Fragment需要与Activity或其他Fragment进行通信时,我们可以使用onActivityResult
方法来获取返回结果。
onActivityResult
方法的作用
onActivityResult
方法是在Fragment接收到Activity返回结果时被调用的。它通常用于获取其他Activity的结果或处理其他Fragment的回调。当Activity启动一个新的Activity或Fragment,并通过startActivityForResult
方法或Fragment.startActivityForResult
方法发送了一个请求码(requestCode),当新的Activity或Fragment完成操作后,会通过setResult
方法将结果返回给调用方,同时会触发调用方的onActivityResult
方法。
onActivityResult
方法的实现步骤
下面是使用onActivityResult
方法的一般步骤:
- 在调用方的Activity中,使用
startActivityForResult
方法或者在调用方的Fragment中,使用Fragment.startActivityForResult
方法启动目标Activity或Fragment,并传递请求码(requestCode)。
// Activity中启动目标Activity
Intent intent = new Intent(this, TargetActivity.class);
startActivityForResult(intent, REQUEST_CODE);
// Fragment中启动目标Fragment
Intent intent = new Intent(getActivity(), TargetFragment.class);
startActivityForResult(intent, REQUEST_CODE);
- 在目标Activity或Fragment中,通过
setResult
方法将结果返回给调用方,并传递结果码(resultCode)和结果数据(data)。
// Activity中返回结果
Intent resultIntent = new Intent();
resultIntent.putExtra("key", value);
setResult(Activity.RESULT_OK, resultIntent);
finish();
// Fragment中返回结果
Intent resultIntent = new Intent();
resultIntent.putExtra("key", value);
getActivity().setResult(Activity.RESULT_OK, resultIntent);
getActivity().finish();
- 在调用方的Fragment中,重写
onActivityResult
方法,处理返回结果。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
// 处理返回结果
String result = data.getStringExtra("key");
// ...
}
}
示例
假设我们有一个包含两个Fragment的Activity,分别是MainFragment
和DetailFragment
。在MainFragment
中,我们可以通过点击按钮来启动DetailFragment
,并传递一些数据。当DetailFragment
完成操作后,会将结果返回给MainFragment
,MainFragment
通过onActivityResult
方法获取结果并进行处理。
// MainFragment.java
public class MainFragment extends Fragment {
private static final int REQUEST_CODE = 1;
private Button button;
// ...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
button = view.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), DetailActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
String result = data.getStringExtra("key");
// 处理返回结果
// ...
}
}
}
// DetailActivity.java
public class DetailActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
// ...
setResult(Activity.RESULT_OK, resultIntent);
finish();
}
}
在上述示例中,我们在MainFragment
中启动DetailActivity
,并在DetailActivity
中设置了返回结果。当DetailActivity
关闭时,onActivityResult
方法会被调用,并处理返回结果。
总结:
onActivityResult
方法是Android中用于在Fragment中接收返回结果的重要方法。通过它,我们可以实现Activity与Fragment的双向通信,使得Fragment能够与Activity及其他Fragment进行交互。在实际开发中,我们应根据需求合理地使用onActivityResult
方法,提高代码的灵活性和可维护性。