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

Android中通过Intent与getExtras传递字符串资源的实现疑问

当然可行!而且可以完美整合到你现有的逻辑里

你的需求完全能实现,不需要额外做复杂的单独处理,只需要稍微修改Adapter的跳转逻辑和目标Activity的接收逻辑就行,具体步骤如下:

1. 修改Adapter的点击事件,传递对应的说明文本

在onItemClick方法里,除了传递EvidenceType,还要根据当前点击的列表项,获取对应的字符串资源并传递到目标Activity。你可以用位置匹配或者类型字符串匹配两种方式:

方式一:通过列表项位置匹配(更高效)

lvEvidence.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        Intent intent = new Intent(EvidenceTypesActivity.this, EvidenceItemsActivity.class);
        String evidenceType = lvEvidence.getItemAtPosition(i).toString();
        intent.putExtra("EvidenceType", evidenceType);

        // 根据列表位置获取对应的说明文本
        String evidenceInfoText;
        switch(i) {
            case 0: // 对应数组里的"Main computer unit"
                evidenceInfoText = getString(R.string.tower_txt);
                break;
            case 1: // 对应"Monitor"
                evidenceInfoText = getString(R.string.monitor_txt);
                break;
            case 2: // 对应"Keyboard and mouse"
                evidenceInfoText = getString(R.string.keyboardmouse_txt);
                break;
            // 其他设备依次补充case
            default:
                evidenceInfoText = "No information available";
                break;
        }
        intent.putExtra("EvidenceInfo", evidenceInfoText);

        startActivity(intent);
    }
});

方式二:通过类型字符串匹配(和你现有逻辑一致)

如果不想依赖位置,也可以用你已经在使用的类型字符串判断:

// 在onItemClick里
String evidenceType = lvEvidence.getItemAtPosition(i).toString();
intent.putExtra("EvidenceType", evidenceType);

String evidenceInfoText;
if (evidenceType.equalsIgnoreCase("Main computer unit")) {
    evidenceInfoText = getString(R.string.tower_txt);
} else if (evidenceType.equalsIgnoreCase("Monitor")) {
    evidenceInfoText = getString(R.string.monitor_txt);
} else if (evidenceType.equalsIgnoreCase("Keyboard and mouse")) {
    evidenceInfoText = getString(R.string.keyboardmouse_txt);
} else {
    evidenceInfoText = "No information available";
}
intent.putExtra("EvidenceInfo", evidenceInfoText);

2. 在目标Activity接收并显示说明文本

在EvidenceItemsActivity的onCreate方法里,从Bundle中取出传递的文本,直接设置到textViewEvidenceInfo即可,把这部分逻辑整合到你现有的Bundle判断里:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_evidence_items);
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    evidenceItem = (ImageView) findViewById(R.id.imageViewEvidenceItem);
    evidenceInfo = (TextView) findViewById(R.id.textViewEvidenceInfo);
    Bundle bundle = getIntent().getExtras();
    if (bundle != null) {
        String evidenceType = bundle.getString("EvidenceType");
        toolbar.setTitle(evidenceType);

        // 新增:获取并设置说明文本
        String infoText = bundle.getString("EvidenceInfo");
        evidenceInfo.setText(infoText);

        // 原有的图片设置逻辑保持不变
        if (evidenceType.equalsIgnoreCase("Main computer unit")) {
            evidenceItem.setImageDrawable(ContextCompat.getDrawable(EvidenceItemsActivity.this, R.drawable.tower));
        } else if (evidenceType.equalsIgnoreCase("Monitor")) {
            evidenceItem.setImageDrawable(ContextCompat.getDrawable(EvidenceItemsActivity.this, R.drawable.monitor));
        } else if (evidenceType.equalsIgnoreCase("Keyboard and mouse")) {
            evidenceItem.setImageDrawable(ContextCompat.getDrawable(EvidenceItemsActivity.this, R.drawable.keyboardmouse));
        // 更多判断逻辑省略
        }
    }
}

额外优化建议(可选)

如果你的设备数量较多,一堆if-else或者switch会显得代码冗余且不易维护。可以创建一个数据模型类来封装每个设备的信息,比如:

public class Evidence {
    private String typeName;
    private int imageResId;
    private int infoResId;

    public Evidence(String typeName, int imageResId, int infoResId) {
        this.typeName = typeName;
        this.imageResId = imageResId;
        this.infoResId = infoResId;
    }

    // getter方法
    public String getTypeName() { return typeName; }
    public int getImageResId() { return imageResId; }
    public int getInfoResId() { return infoResId; }
}

然后创建一个List<Evidence>来存储所有设备数据,用自定义Adapter替代ArrayAdapter,点击时直接传递对应的infoResId或者字符串,这样就能彻底摆脱繁琐的条件判断啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:49:07