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
相关产品推荐
相关产品推荐

