Android Adapter在ListView中的运用

来源:互联网 发布:淘宝店铺不装修可以吗 编辑:程序博客网 时间:2024/06/02 12:23

        列表视图(ListView)在Android中非常常用,创建一个ListView分为两步:

                    一:创建ListView;

                    二:用setAdapter给ListView添加内容。

        列表的每一项(item)中既可以包含简单的文字内容,也可以包含复杂的图片、文字、图形等的复杂布局。复杂的混合布局需要使用Map进行封装成一个整体作为一项。下面分别介绍。

        

一、简单文字布局的ListView

1.效果:


2.代码:

(1)MainActivity.java

package org.wp.adapter01;import java.util.ArrayList;import android.app.Activity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ListView;public class MainActivity extends Activity {private ListView mlistview = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取ListView组件mlistview = (ListView) super.findViewById(R.id.listview);// 给LIstView设定适配器(给ListView填充数据)/* ArrayAdapter的三个参数 :  1.上下文,即此Activity类   2.布局,使用的是系统自带的simple_list_item布局的一种,包括五种  3.ArrayList数据 */mlistview.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, getListData()));}private ArrayList<String> getListData() {// 定义数据组mListArrayList<String> mList = new ArrayList<String>();// 向mList中添加3条数据mList.add("项目1");mList.add("项目2");mList.add("项目3");return mList;}}

(2)activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/container"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="org.wp.adapter01.MainActivity" >    <!-- 在布局中加入ListView -->    <ListView        android:id="@+id/listview"        android:layout_width="fill_parent"        android:layout_height="wrap_content" /></LinearLayout>

3.知识

系统自带的5种简单list_item布局simple_list_item_1  
每个列表项都是一个普通的TextView
simple_list_item_2
每个列表项都是一个普通的TextView(字体稍大)
simple_list_item_checked   
每个列表项都是一个已勾选的列表项
simple_list_item_multiple_choice  
每个列表项都是一个带多选框的文本
simple_list_item_single_choice
每个列表项都是一个带单选按钮的文本


二、文字图片混合布局的ListView

1.效果:


2.代码:

(1)MainActivity.java

package org.wp.adapter02_simp;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;import android.widget.SimpleAdapter;public class MainActivity extends Activity {private ListView mlistview = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mlistview = (ListView) super.findViewById(R.id.listview);// 定义SimpleAdapter(传入5个参数)SimpleAdapter madapter = new SimpleAdapter(this // 父容器, getListData() // 列表项, R.layout.itemlayout // 第五个参数组件来自于该布局界面, new String[] { "province", "city" ,"image"} // 列表项数据的key, new int[] { R.id.text1, R.id.text2, R.id.image}); // 列表项key对应的数据// 设置ListView的适配器mlistview.setAdapter(madapter);}private ArrayList<Map<String, Object>> getListData(){// 定义数据组ArrayList<Map<String, Object>> mlist = new ArrayList<Map<String, Object>>();String[] province = new String[] { "湖北", "江西", "广东" ,"广东"};String[] city = new String[] { "武汉", "南昌", "广州" ,"深圳"};int[] imageId = new int[] { R.drawable.wuhan,R.drawable.nanchang, R.drawable.guangzhou ,R.drawable.shenzhen};// 每循环一次就想列表中添加一条数据for (int i = 0; i < 4; i++) {// 定义HashMap封装数据HashMap<String, Object> item = new HashMap<String, Object>();item.put("province", province[i]);item.put("city", city[i]);item.put("image", imageId[i]);// 将一条封装好的item加入到列表中mlist.add(item);}return mlist;}}

(2)activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/container"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#97D800"    android:orientation="vertical"    tools:context="org.wp.adapter02_simp.MainActivity" >    <!-- 布局中定义一个ListView -->    <ListView        android:id="@+id/listview"        android:layout_width="fill_parent"        android:layout_height="wrap_content" /></LinearLayout>

(3)itemlayout.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal" >    <!-- 左边的垂直布局,放两个TextView -->    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:orientation="vertical" >        <TextView            android:id="@+id/text1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:padding="3dp"            android:textColor="#FFFFFF"            android:textSize="25sp" />        <TextView            android:id="@+id/text2"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:padding="3dp"            android:textColor="#FFFFFF"            android:textSize="25sp" />    </LinearLayout>    <!-- 右边放一张图片 -->    <ImageView        android:id="@+id/image"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:padding="2dp" /></LinearLayout>

小建议:每一项的item布局(即itemlayout.xml的内容)也可以直接写在activity_main.xml中,因为在java文件中使用时是通过id来查找的,但是个人建议新建一个xml布局文件,这样一个item作为一个整体,修改时思路也比较清晰,同时不会影响到activity_main.xml主布局的直观,就这样了。。


0 0
原创粉丝点击