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

Kotlin实现:ListView条目点击跳转并更新TextView、ImageView内容

解决方案

1. 定义数据模型

先创建一个简单的数据类,用来存储每个列表项的文本和图片资源信息:

public class ItemData {
    private String itemText;
    private int itemImageResId;

    public ItemData(String itemText, int itemImageResId) {
        this.itemText = itemText;
        this.itemImageResId = itemImageResId;
    }

    public String getItemText() {
        return itemText;
    }

    public int getItemImageResId() {
        return itemImageResId;
    }
}

2. 准备布局文件

列表项布局(res/layout/list_item.xml)

用来渲染ListView的每个条目:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="16dp">

    <ImageView
        android:id="@+id/list_item_image"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:src="@mipmap/ic_launcher"/>

    <TextView
        android:id="@+id/list_item_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:gravity="center_vertical"
        android:textSize="16sp"/>
</LinearLayout>

主界面布局(res/layout/activity_main.xml)

包含ListView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

详情界面布局(res/layout/activity_detail.xml)

即你提到的单一布局,包含TextView和ImageView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <ImageView
        android:id="@+id/detail_image"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center_horizontal"/>

    <TextView
        android:id="@+id/detail_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_gravity="center_horizontal"
        android:textSize="20sp"/>
</LinearLayout>

3. 实现ListView的适配器

创建自定义适配器来绑定数据和列表项布局:

public class ItemAdapter extends ArrayAdapter<ItemData> {
    public ItemAdapter(Context context, List<ItemData> dataList) {
        super(context, 0, dataList);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
        }

        ItemData currentItem = getItem(position);

        ImageView itemImage = convertView.findViewById(R.id.list_item_image);
        TextView itemText = convertView.findViewById(R.id.list_item_text);

        itemImage.setImageResource(currentItem.getItemImageResId());
        itemText.setText(currentItem.getItemText());

        return convertView;
    }
}

4. 主Activity配置ListView并处理点击事件

在包含ListView的Activity中,初始化数据、设置适配器,并处理条目点击跳转:

public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private List<ItemData> itemDataList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.list_view);
        // 初始化100条测试数据
        itemDataList = new ArrayList<>();
        for (int i = 1; i <= 100; i++) {
            // 这里用占位图片,可替换为自己的资源
            itemDataList.add(new ItemData("条目 " + i, R.mipmap.ic_launcher));
        }

        ItemAdapter adapter = new ItemAdapter(this, itemDataList);
        listView.setAdapter(adapter);

        // 处理条目点击事件
        listView.setOnItemClickListener((parent, view, position, id) -> {
            ItemData clickedItem = itemDataList.get(position);
            Intent intent = new Intent(MainActivity.this, DetailActivity.class);
            // 传递数据到详情页
            intent.putExtra("ITEM_TEXT", clickedItem.getItemText());
            intent.putExtra("ITEM_IMAGE_RES", clickedItem.getItemImageResId());
            startActivity(intent);
        });
    }
}

5. 详情Activity接收数据并更新布局

在展示单一布局的Activity中,获取传递的数据并更新控件:

public class DetailActivity extends AppCompatActivity {
    private TextView detailText;
    private ImageView detailImage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);

        detailText = findViewById(R.id.detail_text);
        detailImage = findViewById(R.id.detail_image);

        // 获取Intent传递的数据
        Intent intent = getIntent();
        if (intent != null) {
            String itemText = intent.getStringExtra("ITEM_TEXT");
            int imageResId = intent.getIntExtra("ITEM_IMAGE_RES", R.mipmap.ic_launcher);

            // 更新控件内容
            detailText.setText(itemText);
            detailImage.setImageResource(imageResId);
        }
    }
}

注意事项

  • 记得在AndroidManifest.xml中注册DetailActivity:
<activity android:name=".DetailActivity"/>
  • 如果你的图片是网络图片而非本地资源,需要修改数据模型存储图片URL,再用Glide等图片加载库加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:40:20