You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从另一个Activity获取文本后更新主界面的TextView?

解决从弹窗Activity更新主界面TextView的问题

问题根源

你在TargetPopupActivity里直接调用MainActivity的方法更新文本,本质是创建了一个全新的MainActivity实例,和当前显示的主界面实例不是同一个,所以setText()不会作用到正在显示的界面上。


推荐方案:使用Activity Result API(AndroidX官方推荐)

这是替代已废弃的startActivityForResult()的新方案,步骤如下:

  1. 在MainActivity中注册Activity Result Launcher
// Kotlin示例
private val popupResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        val inputText = result.data?.getStringExtra("POPUP_INPUT")
        // 直接更新主界面的targetButton
        targetButton.text = inputText ?: ""
    }
}
  1. 启动TargetPopupActivity时使用这个Launcher
// 比如主界面打开弹窗的触发代码
targetButton.setOnClickListener {
    val intent = Intent(this, TargetPopupActivity::class.java)
    popupResultLauncher.launch(intent)
}
  1. 在TargetPopupActivity中返回输入内容
// 弹窗内确认按钮的点击事件
confirmBtn.setOnClickListener {
    val inputContent = targetBox.text.toString().trim()
    val resultIntent = Intent().apply {
        putExtra("POPUP_INPUT", inputContent)
    }
    setResult(Activity.RESULT_OK, resultIntent)
    finish() // 关闭弹窗Activity
}

兼容方案:使用onActivityResult(旧版,已废弃但仍可运行)

如果项目还没迁移到Activity Result API,可使用此方案:

  1. MainActivity中启动弹窗并传入请求码
// Java示例
targetButton.setOnClickListener(v -> {
    Intent intent = new Intent(MainActivity.this, TargetPopupActivity.class);
    startActivityForResult(intent, 1001); // 1001为自定义请求码,可自行修改
});
  1. 重写MainActivity的onActivityResult方法处理返回数据
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1001 && resultCode == RESULT_OK) {
        if (data != null) {
            String inputText = data.getStringExtra("POPUP_INPUT");
            targetButton.setText(inputText);
        }
    }
}
  1. TargetPopupActivity中返回数据
confirmBtn.setOnClickListener(v -> {
    String inputContent = targetBox.getText().toString().trim();
    Intent resultIntent = new Intent();
    resultIntent.putExtra("POPUP_INPUT", inputContent);
    setResult(RESULT_OK, resultIntent);
    finish();
});

关键注意事项

  • 绝对不要通过new MainActivity()的方式创建实例并调用方法,每个Activity实例对应独立的界面上下文,新实例无法操作当前显示的界面。
  • 若TargetPopupActivity设置了弹窗样式(比如主题为Theme.AppCompat.Dialog),上述方案同样适用,核心是通过Intent完成两个Activity之间的数据传递。

内容的提问来源于stack exchange,提问作者Jackson Xailer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 01:03:38