📅  最后修改于: 2023-12-03 14:59:15.409000             🧑  作者: Mango
在Android开发中,我们经常需要在一个Activity中启动另一个Activity并接收返回结果。这时候就需要使用到StartActivityForResult方法。本篇文章将介绍如何使用StartActivityForResult方法,并提供一个示例。
StartActivityForResult是一个Activity的方法,它让我们可以在一个Activity中启动另一个Activity,并期望它会返回一些数据给我们。具体使用方法如下:
startActivityForResult(Intent intent, int requestCode)
参数解释:
假设我们需要在MainActivty中启动一个Activity,让用户输入姓名和年龄,并返回这两个数据给MainActivity。完整代码如下:
public class MainActivity extends AppCompatActivity {
private TextView mNameTextView;
private TextView mAgeTextView;
private Button mEditButton;
private static final int REQUEST_CODE_EDIT_INFO = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNameTextView = findViewById(R.id.name_text_view);
mAgeTextView = findViewById(R.id.age_text_view);
mEditButton = findViewById(R.id.edit_button);
mEditButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, EditInfoActivity.class);
startActivityForResult(intent, REQUEST_CODE_EDIT_INFO);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_EDIT_INFO && resultCode == RESULT_OK) {
String name = data.getStringExtra("name");
int age = data.getIntExtra("age", 0);
mNameTextView.setText(name);
mAgeTextView.setText(String.valueOf(age));
}
}
}
public class EditInfoActivity extends AppCompatActivity {
private EditText mNameEditText;
private EditText mAgeEditText;
private Button mSaveButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_info);
mNameEditText = findViewById(R.id.name_edit_text);
mAgeEditText = findViewById(R.id.age_edit_text);
mSaveButton = findViewById(R.id.save_button);
mSaveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = mNameEditText.getText().toString();
int age = Integer.parseInt(mAgeEditText.getText().toString());
Intent intent = new Intent();
intent.putExtra("name", name);
intent.putExtra("age", age);
setResult(RESULT_OK, intent);
finish();
}
});
}
}
注:布局文件和字符串资源不在本文范围内。
在MainActivity中,我们使用了StartActivityForResult方法来启动EditInfoActivity,并传递了一个请求码REQUEST_CODE_EDIT_INFO。当EditInfoActivity的保存按钮被点击时,我们就调用了setResult方法,并传递了一个结果码RESULT_OK和结果数据Intent。最后,我们调用finish方法关闭当前Activity。
在MainActivity的onActivityResult方法中,我们判断了requestCode和resultCode,并从返回的数据Intent中获取了名字和年龄,最后更新了UI。
以上就是使用StartActivityForResult方法的示例,希望能帮助到广大Android开发者!