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

Android:TextView仅显示最后一个getIntent().getStringExtra()内容?

解决Android Activity间Intent传值并在TextView显示对应内容的问题

没问题,当然可以实现!你的核心需求其实是根据Spinner选中的不同选项,在InfoActivity的单个TextView里显示对应的数据(新内容覆盖旧的),现在代码里的问题主要是传值和接收的逻辑没理顺,咱们一步步来改:

第一步:修正MainActivity的传值逻辑

你现在的代码里,第一个if分支犯了个小错误:startActivity(intent.putExtra("rabit_syno",rabitSyno)); 这里重复调用了putExtra,而且其实每个分支只需要传递当前选中项对应的数据就行,没必要一次性传三个(因为每次启动InfoActivity时,用户只选了一个选项)。更高效的方式是用同一个Key来传递不同的内容,这样接收的时候更简洁:

protected void setGoBtn(){ 
    String rabitSyno = getString(R.string.rabit_syno); 
    String lifeSyno = getString(R.string.life_syno); 
    String poolSyno = getString(R.string.pool_syno); 
    goBtn = (Button) findViewById(R.id.goBtn); 
    goBtn.setOnClickListener(new View.OnClickListener(){ 
        @Override 
        public void onClick(View v){ 
            Intent intent = new Intent(v.getContext(), Info.class); 
            // 根据选中项传递对应的数据,用统一的key
            switch(selectedItem()){
                case 1:
                    intent.putExtra("selected_content", rabitSyno);
                    break;
                case 2:
                    intent.putExtra("selected_content", lifeSyno);
                    break;
                case 3:
                    intent.putExtra("selected_content", poolSyno);
                    break;
                default:
                    // 可选:如果选中无效项,传递默认提示
                    intent.putExtra("selected_content", "请选择有效选项");
            }
            startActivity(intent);
        } 
    }); 
}

这样每次启动InfoActivity时,Intent里只会带当前选中项对应的内容,用同一个keyselected_content,接收的时候就不用判断三个不同的key了。

第二步:简化InfoActivity的接收逻辑

你之前的循环逻辑会导致最后一次setText覆盖前面的内容,因为循环会把三个值都设置一遍,最后一个自然会显示出来。现在咱们只需要读取那个统一的key的值,直接设置给TextView就行:

private void displaySelectedContent(){ 
    // 读取Intent里的内容,第二个参数是默认值(如果没有拿到数据时显示)
    String content = getIntent().getStringExtra("selected_content");
    if(content != null){
        displayTxt.setText(content);
    } else {
        displayTxt.setText("暂无内容");
    }
}

然后在InfoActivity的onCreate方法里调用这个方法就行,比如:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_info);
    displayTxt = (TextView) findViewById(R.id.displayTxt);
    displaySelectedContent();
}

为什么原来的代码会只显示最后一个内容?

你原来的InfoActivity里的循环,会依次执行displayTxt.setText(txtBox[0])、setText(txtBox[1])、setText(txtBox[2]),而TextView的内容会被每次的setText覆盖,所以最后一次设置的txtBox[2]就会留在界面上。而且实际上,每次启动InfoActivity时,Intent里只有一个Extra(比如选中1的时候只有rabit_syno,其他两个都是null),所以循环里的txt1和txt2其实都是null,这样设置还会导致显示空内容的问题。

额外小建议

  • 可以把Intent的key定义成常量,比如在InfoActivity里定义public static final String EXTRA_SELECTED_CONTENT = "selected_content";,这样MainActivity里直接用Info.EXTRA_SELECTED_CONTENT,避免拼写错误。
  • 如果以后需要传递多个数据,也可以用Bundle来封装,比如:
    Bundle bundle = new Bundle();
    bundle.putString("key1", value1);
    bundle.putString("key2", value2);
    intent.putExtras(bundle);
    
    接收的时候用getIntent().getExtras().getString("key1"),不过你的场景用单个key就足够啦。

内容的提问来源于stack exchange,提问作者Kira Nofans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:29:25