如何在另一个Activity点击按钮后修改MainActivity的TextView值
解决Activity间点击按钮修改另一个Activity TextView的问题
问题分析
当前代码在Activity2点击按钮时,通过startActivity启动了新的MainActivity实例,而非回到之前的MainActivity,因此原MainActivity的onRestart仅在按返回键回到它时触发。要实现点击Activity2按钮即修改原MainActivity的TextView,需通过Activity间数据传递+返回原实例的方式实现。
解决方案(传统startActivityForResult方式)
修改MainActivity代码
使用startActivityForResult启动Activity2,并通过onActivityResult接收返回的数据:
package com.example.activity1; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { TextView textView; Button submitButton; private static final int REQUEST_CODE = 1; // 自定义请求码,用于识别返回数据 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.text1); submitButton = findViewById(R.id.submit); submitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 启动Activity2并传递请求码 startActivityForResult(new Intent(MainActivity.this, Activity2.class), REQUEST_CODE); } }); } // 接收Activity2返回的数据 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 匹配请求码和结果码,确保数据来自目标Activity且返回成功 if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { String newText = data.getStringExtra("NEW_TEXT"); textView.setText(newText); } } }
修改Activity2代码
点击按钮时携带数据并关闭当前Activity,返回原MainActivity:
package com.example.activity1; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class Activity2 extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_2); Button reverseButton = findViewById(R.id.reverse); reverseButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 创建Intent封装要传递的文本数据 Intent resultIntent = new Intent(); resultIntent.putExtra("NEW_TEXT", "从Activity2修改完成"); // 设置返回结果码 setResult(RESULT_OK, resultIntent); // 关闭当前Activity,回到原MainActivity finish(); } }); } }
说明
- 此方案中,Activity2点击按钮后不会启动新的MainActivity,而是关闭自身并将数据返回给之前的MainActivity实例,触发
onActivityResult方法完成TextView修改。 - 若使用AndroidX,也可采用更推荐的Activity Result API替代
startActivityForResult,逻辑类似但更符合现代Android开发规范。
内容的提问来源于stack exchange,提问作者Bhavya
相关产品推荐
相关产品推荐

