📜  Android StartActivityForResult示例(1)

📅  最后修改于: 2023-12-03 14:59:15.409000             🧑  作者: Mango

Android StartActivityForResult示例

在Android开发中,我们经常需要在一个Activity中启动另一个Activity并接收返回结果。这时候就需要使用到StartActivityForResult方法。本篇文章将介绍如何使用StartActivityForResult方法,并提供一个示例。

StartActivityForResult方法

StartActivityForResult是一个Activity的方法,它让我们可以在一个Activity中启动另一个Activity,并期望它会返回一些数据给我们。具体使用方法如下:

startActivityForResult(Intent intent, int requestCode)

参数解释:

  • Intent intent:启动的Intent对象
  • int requestCode:请求码,用于在返回结果时识别谁发送了该请求
StartActivityForResult的流程
  1. 在调用StartActivityForResult之前,我们需要准备好一个Intent,用于启动我们需要的Activity。
  2. 当调用StartActivityForResult方法时,Android会启动指定的Activity。
  3. 在启动的Activity中,当我们需要返回数据给启动我们的Activity时,我们需要调用setResult方法,并传入结果数据和一个结果码。
  4. 当启动的Activity被销毁时,Android会自动回调启动我们的Activity的onActivityResult方法,并传递结果数据和结果码。
示例

假设我们需要在MainActivty中启动一个Activity,让用户输入姓名和年龄,并返回这两个数据给MainActivity。完整代码如下:

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));
        }
    }
}
EditInfoActivity
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开发者!