在ListView中使用SimpleAdapter分为三步:创建SimpleAdapter实例,设置布局并初始化数据源, 绑定适配器。
- 创建SimpleAdapter
首先在MainActivity中申明SimpleAdater,然后再onCreate()方法中创建它的实例。构造函数如下:
它的构造函数接收4个参数:SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
context: 当前应用程序上下文;
data: 数据源。这里数据源的类型是 List<? extends Map<String, ?>> 。意思是一个指定泛型为Map或者Map子类的List,且Map的键值类型被指定为String。
resource: 列表项目标布局。可以在layout目录下定义。
from: 数据源中Map中的键值。
to: 布局中的控件id,与from中的键值相对应。
2. 设置布局并初始化数据源完整示例代码如下:
布局对应着构造函数中resouce参数;数据源对应着data参数。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ... getData(); adapter = new SimpleAdapter(this, dataList, R.layout.list_item, new String[]{"image", "text"}, new int[]{R.id.image, R.id.text}); ... } private void getData(){ for(int i = 0; i < 20; i++){ Map<String, Object> map = new HashMap<String, Object>(); map.put("image", R.drawable.ic_launcher); map.put("text", "Demo" + i); dataList.add(map); } }
3. 绑定适配器
调用ListView的setAdapter()方法绑定适配器:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ... listView.setAdapter(adapter); }
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.simpleadapterdemo.MainActivity" >
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
list_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="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_gravity="center_vertical"
android:textSize="20sp"
android:text="TextView" />
</LinearLayout>
MainActivity.java
public class MainActivity extends Activity {
private ListView listView;
private SimpleAdapter adapter;
private List<Map<String, Object>> dataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView)findViewById(R.id.listView);
dataList = new ArrayList<Map<String, Object>>();
getData();
adapter = new SimpleAdapter(this, dataList, R.layout.list_item, new String[]{"image", "text"}, new int[]{R.id.image, R.id.text});
listView.setAdapter(adapter);
}
private void getData(){
for(int i = 0; i < 20; i++){
Map<String, Object> map = new HashMap<String, Object>();
map.put("image", R.drawable.ic_launcher);
map.put("text", "Demo" + i);
dataList.add(map);
}
}
}
效果如下: