SimpleCursorAdapter的点击事件的处理
首先我们知道在处理listview的点击事件的时候,因为我们有一个list用来存放所有的数据,然后用这个list去和adapt做匹配,那么我们在处理点击的事件的时候,如果我们想获取我们点击的这一行的值,我们只要根据id找到list中对应的数据即可,例如
1 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 2 @Override 3 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 4 Intent intent=new Intent(); 5 if(id==0) 6 { 7 intent.setClass(Contacts_Activity.this,Add_Contact_Activity.class); 8 startActivity(intent); 9 } 10 else if(id>=4) 11 { 12 intent.setClass(Contacts_Activity.this,Contact_details_Activity.class); 13 intent.putExtra("name",list.get(position).getName()); 14 intent.putExtra("head",list.get(position).getId()); 15 intent.putExtra("number",list.get(position).getWechat_number()); 16 startActivity(intent); 17 } 18 } 19 });
但是SimpleCursorAdapter不行,因为它的list是一个hashmap,这样的话如果我们想要获取点击行的数据是非常不好处理的,在这里提供一种解决方案
1 final Cursor cursor=databaseManager.executeSql(sql,null); 2 final SimpleCursorAdapter adapter=new SimpleCursorAdapter(this,R.layout.main_listview_item,cursor, 3 new String[]{"name","head","descs"},new int[]{R.id.me_listview_name,R.id.me_listview_head,R.id.me_listview_desc}); 4 listView.setAdapter(adapter); 5 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 6 @Override 7 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 8 Cursor c = (Cursor) listView.getItemAtPosition(position); 9 String name=c.getString(c.getColumnIndex("name")); 10 int id1=c.getInt(c.getColumnIndex("head")); 11 EventBus.getDefault().postSticky(new MessageEvent(name,id1)); 12 Intent intent=new Intent(); 13 intent.setClass(MainActivity.this,chat_Activity.class); 14 startActivity(intent); 15 } 16 });
以上代码中有获取string和int两种类型的方法,其他的也是一样的
先获取listview的cursor,然后根据这个cursor,通过数据的名字获取值。