按下后如何将数据从第二个活动传递到第一个活动? \- 安卓

新手上路,请多包涵

我有 2 个活动, Activity1Activity2

Activity1 我有一个 ButtonTextView 。单击按钮时, Activity2 将启动。

Activity2 我有一个 EditText

当从 Activity2 按下返回时,我想在 Activity1TextView 中显示从 Activity2 中的 EditText 检索到的数据。

有人可以帮我编写代码来完成这项工作吗?

原文由 kumareloaded 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 460
2 个回答

使用 --- startActivityForResult 启动 Activity2 并使用 setResult 方法将数据从 Activity2 发送回 Activity1。在 Activity1 中,您需要覆盖 onActivityResult 以更新 TextViewEditText 来自 Activity2 的数据。

例如:

Activity1 中,将 Activity2 启动为:

 Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);

Activity2 中,使用 setResult 发送数据:

 Intent intent = new Intent();
intent.putExtra("editTextValue", "value_here")
setResult(RESULT_OK, intent);
finish();

Activity1 中,使用 onActivityResult 接收数据:

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
         if(resultCode == RESULT_OK) {
             String strEditText = data.getStringExtra("editTextValue");
         }
    }
}

如果可以,还可以使用 SharedPreferences 在活动之间共享数据。

原文由 ρяσѕρєя K 发布,翻译遵循 CC BY-SA 3.0 许可协议

2021年java新更新后:

在 MainActivity 中使用 activityresultlauncher() 而不是 startactivityforresult()。

 ActivityResultLauncher<Intent> activityResultLaunch = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if (result.getResultCode() == 123) {
                    Intent data = result.getData();
                    String myStr = data.getStringExtra("MyData");

                    if (!TextUtils.isEmpty(myStr )) {
                        myTextView.setText(myStr);
                    }

                }
            }
        });

在 onCreate() 内部:

 myBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, Second.class);
            activityResultLaunch.launch(intent);
        }
    });

SecondActivity 内部(onCreate 外部):

 @Override
public void onBackPressed() {
    String data = myEditText.getText().toString();
    Intent intent = new Intent();
    intent.putExtra("MyData", data);
    setResult(123, intent);
    finish();
}

原文由 Md Anik 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题