SimpleAdapter的参数说明
第一个参数 表示访问整个android应用程序接口,基本上所有的组件都需要
第二个参数表示生成一个Map(String ,Object)列表选项
第三个参数表示界面布局的id 表示该文件作为列表项的组件
第四个参数表示该Map对象的哪些key对应value来生成列表项
第五个参数表示来填充的组件 Map对象key对应的资源一依次填充组件 顺序有对应关系
布局和上一篇一样,还是用ListView控件,显示方式不一样,上一篇使用BaseAdapter(),这篇使用SimpleAdapter();
效果如下
代码:
public class MainActivity extends Activity {
private ListView lv;
private SimpleAdapter mp;
//集合
private List<mess> messagetlist=new ArrayList<mess>();
private List<Map<String,Object>> messagetlist2=new ArrayList<Map<String,Object>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wei);
//循环读取数据,模仿数据库
for (int i = 0; i <50; i++) { //定义一个界面与数据的混合体,一个item代表一行记录
Map<String,Object> item=new HashMap<String,Object>();
//一行记录,包含多个控件
item.put("img",R.drawable.lad);
item.put("name","少年");
item.put("mess","过的怎么样啊");
item.put("date","11-28");
messagetlist2.add(item);
}
//查找listView1对象
lv=(ListView)findViewById(R.id.listView1);
mp=new SimpleAdapter(this,
messagetlist2,//data 不仅仅是数据,而是一个与界面耦合的数据混合体
R.layout.img,
new String[]{"img","name","mess","date"},
new int[]{R.id.imageView1,R.id.name,R.id.mess,R.id.date});
lv.setAdapter(mp); } });
刷新Listview,这里是把少年改为青年
lv.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parment, View view, int position,
long id) {
Map<String,Object> item=messagetlist2.get(position);
item.put("name","青年");
mp.notifyDataSetInvalidated();
}
长按Item,出现菜单栏,效果:
代码:
lv.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
public void onCreateContextMenu(ContextMenu conMenu, View view , ContextMenuInfo info) {
conMenu.setHeaderTitle("操作");
conMenu.add(0, 0, 0, "标为未读");
conMenu.add(0, 1, 1, "置顶工作号");
conMenu.add(0, 2, 2, "取消关注");
conMenu.add(0,3,3,"删除该聊天");
}
});
可以去比较下BaseAdapter()和SimpleAdapter()的用法,看下你更适用于哪一种写法。