Android开发:点击ListView项后传递ArrayList指定字段至DetailActivity
解决ListView点击项传递数据到DetailActivity的方案
嘿,这个需求其实很容易实现,咱们分几步来搞定:
1. 确保数据模型清晰(可选但推荐)
如果你的elemanalicak ArrayList里的元素还没有封装成自定义类,建议先定义一个数据类来包裹这三个int字段,这样后续操作更直观:
public class ItemModel { public int resim; public int desc; public int title; public ItemModel(int resim, int desc, int title) { this.resim = resim; this.desc = desc; this.title = title; } }
这样你的Core.elemanalicak就是ArrayList<ItemModel>类型的集合啦。
2. 给ListView设置点击事件
在你展示ListView的Activity(或Fragment)中,添加Item点击监听,获取目标数据并通过Intent传递:
// 假设你的ListView实例是listView listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 获取点击位置对应的Item对象 ItemModel selectedItem = Core.elemanalicak.get(position); // 创建跳转Intent,指定目标为DetailActivity Intent detailIntent = new Intent(YourCurrentActivity.this, DetailActivity.class); // 把需要传递的resim和desc存入Intent,自定义键名要记牢 detailIntent.putExtra("EXTRA_RESIM_ID", selectedItem.resim); detailIntent.putExtra("EXTRA_DESC_RES_ID", selectedItem.desc); // 启动DetailActivity startActivity(detailIntent); } });
注意把YourCurrentActivity替换成你当前的Activity类名(比如MainActivity)。
3. 在DetailActivity中接收并展示数据
在DetailActivity的onCreate方法里,取出Intent携带的数据,然后更新UI控件:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); // 获取跳转过来的Intent Intent receivedIntent = getIntent(); if (receivedIntent != null && receivedIntent.getExtras() != null) { // 取出传递的两个int值,第二个参数是默认值(如果没拿到数据时用) int imageResId = receivedIntent.getIntExtra("EXTRA_RESIM_ID", 0); int descResId = receivedIntent.getIntExtra("EXTRA_DESC_RES_ID", 0); // 找到布局中的ImageView和TextView(要和你的布局id对应) ImageView detailImage = findViewById(R.id.detail_image_view); TextView detailDesc = findViewById(R.id.detail_desc_text); // 设置图片:因为resim是int类型,应该是drawable资源ID detailImage.setImageResource(imageResId); // 设置描述:如果desc是字符串资源ID,就用getString()解析;如果是纯数字描述,直接转字符串即可 detailDesc.setText(getString(descResId)); // 如果是纯数字:detailDesc.setText(String.valueOf(descResId)); } }
额外注意事项
- 一定要在
AndroidManifest.xml中注册DetailActivity,否则启动时会抛出异常。 - 传递和接收时的键名(比如
EXTRA_RESIM_ID)必须完全一致,大小写也要注意。 - 如果你的
elemanalicak里的元素不是自定义类(比如用HashMap存储),那获取数据的方式改成:((HashMap)Core.elemanalicak.get(position)).get("resim"),但还是推荐用自定义类,代码可读性更高。
内容的提问来源于stack exchange,提问作者Anıl İşgör
相关产品推荐
相关产品推荐

