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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:10:37