Android如何将Activity A的按钮文本传递到Activity B并显示在TextView中
实现方案
核心思路是通过Intent携带参数在Activity间传递数据,具体实现步骤如下:
1. 修改SmActivity(即Activity A)的跳转逻辑
在跳转至BasketActivity(即Activity B)前,把所有按钮当前的文本内容存入Intent的Extra参数中,首先调整按钮的声明位置为类成员变量,否则跳转方法中无法访问按钮实例:
public class SmActivity extends Activity { // 将按钮声明为类成员变量 private Button btn_apple; private Button btn_cherry; private Button btn_orange; private Button btn_waterLemon; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sm); // 赋值逻辑保持不变 btn_apple = (Button) findViewById(R.id.button_apple); btn_cherry = (Button) findViewById(R.id.button_cherry); btn_orange = (Button) findViewById(R.id.button_orange); btn_waterLemon = (Button) findViewById(R.id.button_waterlemon); // 原有点击监听逻辑保持不变 ... }
再修改跳转方法OnClickBsk,把按钮文本存入Intent:
public void OnClickBsk(View view){ Intent intent = new Intent(SmActivity.this, BasketActivity.class); // 存入四个按钮的当前计数文本 intent.putExtra("apple_count", btn_apple.getText().toString()); intent.putExtra("cherry_count", btn_cherry.getText().toString()); intent.putExtra("orange_count", btn_orange.getText().toString()); intent.putExtra("waterlemon_count", btn_waterLemon.getText().toString()); startActivity(intent); }
2. 修改BasketActivity(即Activity B)的逻辑
在onCreate方法中接收传递的参数,给对应TextView设置文本并切换为可见状态:
public class BasketActivity extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_basket); // 替换为你布局中实际的TextView ID TextView tvApple = findViewById(R.id.tv_apple); TextView tvCherry = findViewById(R.id.tv_cherry); TextView tvOrange = findViewById(R.id.tv_orange); TextView tvWaterlemon = findViewById(R.id.tv_waterlemon); // 接收参数 Intent intent = getIntent(); String appleCount = intent.getStringExtra("apple_count"); String cherryCount = intent.getStringExtra("cherry_count"); String orangeCount = intent.getStringExtra("orange_count"); String waterlemonCount = intent.getStringExtra("waterlemon_count"); // 设置文本并设为可见 if (appleCount != null) { tvApple.setText(appleCount); tvApple.setVisibility(View.VISIBLE); } if (cherryCount != null) { tvCherry.setText(cherryCount); tvCherry.setVisibility(View.VISIBLE); } if (orangeCount != null) { tvOrange.setText(orangeCount); tvOrange.setVisibility(View.VISIBLE); } if (waterlemonCount != null) { tvWaterlemon.setText(waterlemonCount); tvWaterlemon.setVisibility(View.VISIBLE); } } }
可选优化:简化SmActivity的重复点击监听
你现有代码写了四个逻辑完全一致的点击监听器,冗余度很高,可以封装为通用方法减少重复代码:
// 通用计数点击监听器 private View.OnClickListener getCountListener(Button btn) { return new View.OnClickListener() { boolean action = false; @Override public void onClick(View v) { if (!action) { action = true; btn.setText("1"); } else { int count = Integer.parseInt(btn.getText().toString()); btn.setText(String.valueOf(count + 1)); } } }; }
设置监听时直接调用即可:
btn_apple.setOnClickListener(getCountListener(btn_apple)); btn_cherry.setOnClickListener(getCountListener(btn_cherry)); btn_orange.setOnClickListener(getCountListener(btn_orange)); btn_waterLemon.setOnClickListener(getCountListener(btn_waterLemon));
内容的提问来源于stack exchange,提问作者SikroN
相关产品推荐
相关产品推荐

