android, new SimpleAdapter(....).....这里的定义是什么意思啊??求大神解释下

SimpleAdapter adapter = new SimpleAdapter(this, listItems,
R.layout.items, new String[] { "title", "image" }, new int[] {
R.id.title, R.id.image }); // 创建SimpleAdapter
//SimpleAdapter(Context context, List<? extends Map<String,?>> data, int resource, String[] from, int[] to)
最新回答
小乀奶嘴

2024-10-15 08:23:40

new SimpleAdapter(...)里的定义意思:

第 1 个参数:是一个Context对象,它代表了访问整个Android应用的接口。


第 2 个参数:该参数应该是一个List<? extends Map<String,?>>类型集合的对象,该集合中每个Map<String,?> 对象生成一个列表项。


第 3 个参数:该参数指定一个界面布局的ID。例如此处指定了R.layout.simple_item,这意味着使用/res/layout/simple_item.xml(需自己创建布局文件)文件作为列表项组件。


第 4 个参数:该参数应该是一个String[]类型的参数,该参数决定提取Map<String,?>对象中哪些key对应的value来生成列表项。


第 5 个参数:该参数应该是一个int[]类型的参数,该参数决定填充哪些组件(参数3上面的布局文件中的组件ID)。


代码示例

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 SimpleAdapterTest extends Activity {

private String[] names = new String[] { "张三", "李四", "王五", "赵六" };
private String[] descs = new String[] { "一个农民", "一个长工", "一个混混", "一个捕快" };
private int[] imageIds = new int[] { R.drawable.ic_launcher,
R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher };

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_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 simpleAdapter = new SimpleAdapter(this, listItems,
R.layout.simple_item, new String[] { "", "", "" },
new int[] { R.id.name, R.id.header, R.id.desc });
ListView listView = (ListView) findViewById(R.id.mylistView);
// 为ListView设置Adapter
listView.setAdapter(simpleAdapter);
}
}

}
此姻花弥散

2024-10-15 08:04:00

SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局,而且使用很方便

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
参数context:上下文,比如this。关联SimpleAdapter运行的视图上下文
参数data:Map列表,列表要显示的数据,这部分需要自己实现,如例子中的getData(),类型要与上面的一致,每条项目要与from中指定条目一致
参数resource:ListView单项布局文件的Id,这个布局就是你自定义的布局了,你想显示什么样子的布局都在这个布局中。这个布局中必须包括了to中定义的控件id
参数 from:一个被添加到Map上关联每一个项目列名称的列表,数组里面是列名称
参数 to:是一个int数组,数组里面的id是自定义布局中各个控件的id,需要与上面的from对应

SimpleAdapter可以使用自定义的ListView,然后setContentView即可。也可以直接使用系统自带的ListAcitivity,该ListActivity实现了ListView,显示ListView的时候做了很多优化。
ListActivity直接extends ListActivity即可,不需要在setContentView了
「遺落的星星」

2024-10-15 09:06:23

1 上下文,绝大多数情况下是某个activity
2 列表数据是一个key为string类型,value任意类型的map组成的list
例如:[{"title": "hello", "image": 某图片}, {"title": "world", "b": 另一个图片}, ...]
3 列表item的布局文件
4 适配器映射的from端值,是一个String数组,数组的元素要和2中的key对应,例如本例应该是
new String[]{"title", "image"};
5 对应的布局元素id,id必须在参数3的布局文件中存在,并且和2中的每个map是对应关系
即R.id.title对于的textview,使用2中每一行的"title"对应的value
而R.id.image,使用2中每一行的"image"对应的value