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()的用法,看下你更适用于哪一种写法。