接上文
上一篇文章使用的是ListView中最简单的ArrayAdapter,而且可以很容易的看出,ArrayAdapter比较适合
单一的显示一些文本信息。不过这并不表明使用ArrayAdapter不能显示图片的信息。如下:
适配器需要使用的xml文件list.xml,其中TextView必须指定id,适配器需要
其他部分和上一篇文章中并没有两样,只是在创建适配器的时候略有不同:
ArrayAdapter adapter = new ArrayAdapter(this, R.layout.list,R.id.text1 ,getList());//多出一个参数xml中的TextView的id
显示的结果图:
不过从这里可以看出,ArrayAdapter对一些复杂的视图确实不适用,可以考虑用SimplAdapter来实现。
SimpleAdapter的扩展性最好,可以定义各种各样的布局,可以放上格式的UI组件。SimpleAdapter的主要
作用就是将List集合的数据转换为ListView可以使用的格式。而要实现这种转换,首先需要定义一个布局文件
作为数据的显示模板,其次,数据是以键值对的形式(Map)存放在List集合中的,这样布局文件中的UI组件
的ID实际应该和Map对象里面的“键”(Key)对应,至于组件的实际内容则由Map对象的Value决定。
下面给出程序例子:(玩过dota,就以dota中的英雄为列表)
hero_list.xml
MainActivity.java中的代码:
package com.example.layout_listview_simpleadapter; 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.view.Gravity; import android.view.Menu; import android.view.View; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class MainActivity extends Activity { private ListView listView = null; protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.list); SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.hero_list, new String[] { "title", "info", "img" }, new int[] { R.id.title, R.id.info, R.id.img }); listView.setAdapter(adapter); } private List
附上效果图:
上述代码中红色部分为关键部分:
SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.hero_list, new String[] { "title", "info", "img" }, new int[] { R.id.title, R.id.info, R.id.img });
这里就是SimpleAdapter的构造,他指定了所有的数据类型为Map对象,即getData()返回的是一个Map对象
并且指定了显示数据的模板(R.ayout.hero_list),而且这个模板还进一步制定了ListView中数据显示的格式,
每一个map对象的Key都会与模板ID进行匹配,以其指定的格式显示。容易知道的是一个Map对象就是ListView
的一行。
以下是完整源码:
http://download.csdn.net/detail/kiritor/5126322