Android开发:ListView用SimpleAdapter来实现自定义布局和点击

ListView用SimpleAdapter来实现自定义布局和点击

简单的ListView只能实现文字的列表显示。这里就不过多的介绍了,可自行百度找下。
而这次我介绍的是ListView用SimpleAdapter来实现自定义布局和点击。
一、首先要自定义一个列表的样式list_item_layout.xml文件。

<!--list_item_layout.xml-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <LinearLayout
        android:layout_width="165dp"
        android:layout_height="120dp"
        android:paddingLeft="12dp"
        android:paddingRight="12dp"
        android:layout_marginTop="5dp">
        <!--自定义图片-->
        <ImageView
            android:id="@+id/imgv"
            android:layout_width="150dp"
            android:layout_height="120dp"
            android:src="@drawable/a0"
            ></ImageView>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:orientation="vertical"
        android:paddingLeft="12dp"
        android:paddingRight="12dp"
        android:layout_marginTop="5dp">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="12dp"
                android:text="名称:"></TextView>
            <TextView
                android:id="@+id/name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""></TextView>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="12dp"
                android:text="主演:"></TextView>
            <TextView
                android:id="@+id/zy"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""></TextView>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="12dp"
                android:text="导演:"></TextView>
            <TextView
                android:id="@+id/dy"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""></TextView>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

二、自定义完一个list_item的布局文件后,就要在主页面上添加ListView主键,来使用list_item布局。
在主页面添加ListView组件。

<!--注意一定要声明一个id,方便java文件查找到该组件-->
<ListView
    android:id="@+id/lv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"></ListView>
    

三、在主页面的控制器java文件里查找该组件,并添加第一步里的布局文件。
(1)声明需要的变量,这里声明的变量是死的,在真实的开发中是由后端传入的变量。

//模拟数据
private String[] name={"杀破狼2", "谍影重重5", "疯狂原始人", "叶问2", "赤道"},zy={"郑保瑞", "道格·里曼", " 柯克·德·米科", "叶伟信", "梁乐民/陆剑青"},dy={"吴京/托尼·贾/张晋",  "马特·达蒙/弗兰卡·波坦特" , "尼古拉斯·凯奇", " 甄子丹/洪金宝", "张学友/张家辉"};
//这是模拟的图片数据,报错的话需要引入图片放在drawable文件夹里
private int[] imgv=new int[]{R.drawable.a0,R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a4};

(2)在onCreate方法里添加自定义组件并添加点击事件

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到ListView
        ListView listView=findViewById(R.id.lv);
        //声明一个列表映射
        List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
        for (int i=0;i< name.length;i++){
        //声明一个映射将值添加的映射列表中
            Map<String,Object> listitem=new HashMap<String,Object>();
            listitem.put("imgv",imgv[i]);
            listitem.put("name",name[i]);
            listitem.put("zy",zy[i]);
            listitem.put("dy",dy[i]);
            list.add(listitem);
        }
        //声明SimpleAdapter将this,列表映射,自定义的布局文件,文件需要的值等等传给每个列表项中
        SimpleAdapter adapter=new SimpleAdapter(this,list,R.layout.list_item_layout,new String[]{"imgv","name","zy","dy"},new int[]{R.id.imgv,R.id.name,R.id.zy,R.id.dy});
        listView.setAdapter(adapter);
        //给每个列表项添加点击事件
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            //这里写具体点击的事件,下面写的是一个弹框
                Toast.makeText(MainActivity.this,name[i],Toast.LENGTH_SHORT).show();
            }
        });
    }

到这里就完成了SimpleAdapter自定义ListView布局和点击事件。


版权声明:本文为weixin_45676887原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。