Android ListView 使用 SimpleAdapter 适配器显示数据

本教程将介绍如何在 Android 中使用 SimpleAdapter 为 ListView 设置适配器,以显示来自 ArrayList<HashMap<String, Object>> 的数据。示例展示了如何设置数据源、定义布局文件和使用 SimpleAdapter。

步骤:

  1. 准备数据源

    • 使用 ArrayList<HashMap<String, Object>> 存储数据。
    • 每个 HashMap 代表一行数据,键值对表示数据项的名称和值。
  2. 创建布局文件

    • 创建一个 XML 布局文件,用于定义 ListView 中每行的样式。
    • 布局文件应包含用于显示数据的 TextView 或其他 View
    • 确保在布局文件中定义了 id 属性,以便 SimpleAdapter 可以将数据映射到相应的 View。
  3. 创建 SimpleAdapter

    • 使用 SimpleAdapter 类创建适配器。
    • 将数据源、布局文件、数据键名称、数据键对应 View 的 ID 传递给 SimpleAdapter 的构造函数。
  4. 将适配器设置到 ListView

    • 使用 listView.setAdapter(adapter) 将 SimpleAdapter 设置到 ListView。

示例代码:


import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;

import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;

public class SimpleAdapterDemo extends AppCompatActivity {    private ListView listView;

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_simple_adapter_demo);        listView = (ListView)findViewById(R.id.listView1);

        // 为 ListView 设置适配器        List<Map<String, Object>> data = initData();        String[] from = {'photo', 'title', 'detail'};        int[] to = {R.id.photo, R.id.title, R.id.detail};        SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item_layout, from, to);        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                TextView tv = (TextView)view.findViewById(R.id.detail);                Toast.makeText(SimpleAdapterDemo.this, tv.getText().toString(), Toast.LENGTH_SHORT).show();            }        });

        // 创建 Imageview 作为 listView 的 header View        ImageView iv = new ImageView(this);        iv.setBackgroundResource(R.drawable.header);        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(                LinearLayout.LayoutParams.MATCH_PARENT,                240        );        iv.setLayoutParams(lp);        listView.addHeaderView(iv);

        listView.setOnLongClickListener(new View.OnLongClickListener() {            @Override            public boolean onLongClick(View view) {                return false;            }        });    }

    private List<Map<String, Object>> initData() {        List<Map<String, Object>> data = new ArrayList<>();        Map map;

        map = new HashMap();        map.put('photo', R.drawable.yq);        map.put('title', '杨倩绝杀女子10米气步枪');        map.put('detail', '中国00后运动员杨倩最后一枪绝杀,为中国代表团射落东京奥运会的首枚金牌。');        data.add(map);

        map = new HashMap();        map.put('photo', R.drawable.j2);        map.put('title', '侯志慧女子举重49公斤级夺冠');        map.put('detail', '在2020年奥运会女子举重49公斤级比赛中,侯志慧以总成绩210kg获得冠军。');        data.add(map);

        map = new HashMap();        map.put('photo', R.drawable.j3);        map.put('title', '孙一文女子重剑夺中国第三金');        map.put('detail', '女子重剑个人赛,孙一文以11比10击败罗马尼亚选手波佩斯库,获得冠军。');        data.add(map);

        map = new HashMap();        map.put('photo', R.drawable.j4);        map.put('title', '跳水女子三米板施廷懋王涵夺冠');        map.put('detail', '中国跳水队施廷懋/王涵发挥稳定,她们一路领先以326.40分夺得冠军。');        data.add(map);

        map = new HashMap();        map.put('photo', R.drawable.j5);        map.put('title', '举重男子61公斤级李发彬夺冠');        map.put('detail', '举重男子61公斤级,李发彬以抓举141公斤,挺举172公斤,获得金牌。');        data.add(map);

        map = new HashMap();        map.put('photo', R.drawable.j6);        map.put('title', '大力士谌利军举重67公斤级夺冠');        map.put('detail', '男子67公斤级比赛,中国选手谌利军最终以332公斤获得冠军.');        data.add(map);

        map = new HashMap();        map.put('photo', R.drawable.j7);        map.put('title', '十米气手枪混双姜冉馨/庞伟夺金');        map.put('detail', '气手枪混合团体决赛姜冉馨/庞伟,连续逆转,最后一枪绝杀对手夺金.');        data.add(map);

        map = new HashMap();        map.put('photo', R.drawable.j8);        map.put('title', '女子十米台陈芋汐/张家齐夺金');        map.put('detail', '陈芋汐/张家齐在女子双人10米台上一路领先,以363.78分夺取金牌。');        data.add(map);

        map = new HashMap();        map.put('photo', R.drawable.j9);        map.put('title', '双杨组合射落气步枪混团金牌');        map.put('detail', '杨倩/杨皓然在气步枪混团决赛里以17比13战胜美国对手夺冠,取得中国第9金.');        data.add(map);

        map = new HashMap();        map.put('photo', R.drawable.j10);        map.put('title', '女子四人双桨决赛中国赛艇夺金');        map.put('detail', '中国陈云霞/张灵/吕扬/崔晓桐划出6分05秒13的成绩,获得该项目金牌。');        data.add(map);

        return data;
Android ListView 使用 SimpleAdapter 适配器显示数据

原文地址: https://www.cveoy.top/t/topic/mOrC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录