标签:
使用ArrayAdapter只能显示TextView,显示的内容比较单一。可以使用SimpleAdapter来让每一项显示的内容更加丰富。以下将实现一个样例,先上效果图。
首先,先来看看xml代码,同样需要一个主布局和一个表示每一个列表项的布局。如下:
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" > <!-- 定义一个List --> <ListView android:id="@+id/mylist" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
main.xml其实就只有一个ListView控件。
simple_item.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="wrap_content" android:orientation="horizontal" > <!-- 定义一个ImageView,用于作为列表项的一部分。 --> <ImageView android:id="@+id/header" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="10dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <!-- 定义一个TextView,用于作为列表项的一部分。 --> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="10dp" android:textColor="#f0f" android:textSize="20dp" /> <!-- 定义一个TextView,用于作为列表项的一部分。 --> <TextView android:id="@+id/desc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="10dp" android:textSize="14dp" /> </LinearLayout> </LinearLayout>
simple_item.xml中有一个ImageView和两个TextView,从文章开头给出的效果图可知道每一个列表项的显示效果。
下面将给出实现代码,
public class SimpleAdapterTest extends Activity { private String[] names = new String[] { "虎头", "弄玉", "李清照", "李白" }; private String[] descs = new String[] { "可爱的小孩", "一个擅长音乐的女孩", "一个擅长的文学的女性", "浪漫主义诗人" }; private int[] imageIds = new int[] { R.drawable.tiger, R.drawable.nongyu, R.drawable.qingzhao, R.drawable.libai }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 创建一个List集合,List集合的元素是Map List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>(); for (int i = 0; i < names.length; i++) { Map<String, Object> listItem = new HashMap<String, Object>(); listItem.put("header", imageIds[i]); listItem.put("personName", names[i]); listItem.put("desc", descs[i]); listItems.add(listItem); } // 创建一个SimpleAdapter /* * SimpleAdapter(Context context, List<? extends Map<String, ?>> data, * int resource, String[] from, int[] to) * context * data:元素为Map的List集合 * resource:列表项的布局文件 * from:用来显示到列表项的数据的key值集合 * to:用来显示列表项数据的resource中的控件id集合,注意要跟上面的显示数据key值集合一一对应 */ SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.simple_item, new String[] { "personName", "header", "desc" }, new int[] { R.id.name, R.id.header, R.id.desc }); ListView list = (ListView) findViewById(R.id.mylist); // 为ListView设置Adapter list.setAdapter(simpleAdapter); } }
对比ArrayAdapter,可以发现,其实实现步骤还是那三步,设置数据,设置适配器,绑定适配器,只是有些步骤复杂了些,如下:
1.设置数据:这里设置的数据必须是Map元素的List集合,Map可以放多个键值对;
2.设置适配器:除了传入列表项布局文件id以及相应的数据集合外,还需要将用来显示到列表项的数据的key值集合,以及对应的布局文件中控件的ID集合
标签:
原文地址:http://www.cnblogs.com/limaofuyuanzhang/p/4215996.html