我将数据库的数据显示在listview
上时,想通过长按listview
显示菜单,菜单中包含删除和更新操作,通过长按listview
显示菜单,可以通过复写onCreateContextMenu()
和onContextItemSelected()
方法来实现,这个很简单,在这里就不赘述了,重点在于当我们进行删除操作时,如何删除
这一项,也就是我们需要得到这个item
中的数据,比如id
,这个id
是数据库的id
,而不是item
的id
,这两个是不相同的,因为当我们删除其中的某
一个item
时,item
的id
和数据库的id
就会不同。那么我们如何得到数据库的id
呢?这里提供五种种方法:
方法一:让listview
设置监听器,这里需要提一下,我们最好是设置长按监听器,不然的话,你点击一下,得到了id
,然后还要再长按一次,得到菜单,
因为长按只会触发OnItemLongClickListener
,不会触发OnItemClickListener
,当然你可以让OnItemLongClickListener返回的是false,这样就不会拦截事件了,但是只需要设置一个监听器岂不是更好,所以最好设置长按监听器。然后在其中写入如下代码:
View v=myListView.getChildAt(position);
TextView t=(TextView) v.findViewById(R.id.myTextView1);
itemid=t.getText().toString();
其中的第一行是得到listview
中的item
的布局,我这里是自定义的布局,用的是linearLayout
,这里得到的也就是lineadlayout
,第二行是得到
用于显示id
的控件,我这里是用的TextView
,它的id
就是R.id.myTextView1
,如果你使用的是系统的布局,那么你的对应的id
就是android.R.i
d.text1
,然后第三行就不用解释了,这样就得到了数据库中的id,当然你还可以得到别的很多数据。
方法二:
让listview
设置监听器,然后用到游标,在监听器中加入如下代码:
String sql=”select userid from user”;
cursor=sqLiteDatabase.rawQuery(sql, null);
cursor.moveToPosition(position);
int id2=cursor.getInt(cursor.getColumnIndex(“userid”));
这样就得到了这些你所点击的item
中的数据库id
。
方法三:
让listview
设置监听器,然后写入如下代码:
HashMap<String, String> h1= (HashMap<String, String>) parent.getItemAtPosition(position);
h1.get(“userid”);
这个方法第一行代码得到的是每一个item
的值,注意是item
的值,这里的item
是HashMap
结构的。这与第一中方法不同,第一种方法的第一行代码是得到item的布局
第二行代码是取值,因为是HashMap
结构的,所以采用这个方式取值,其中"userid"
是键。
方法四:
不设置监听器,在onContextItemSelected()
方法中写入代码:
AdapterView.AdapterContextMenuInfo info=(AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
int q=(int) info.id;
Log.i(“Logcat”, “q=”+q);
View v1= myListView.getChildAt(q);
TextView t2=(TextView) v1.findViewById(R.id.myTextView1);
String st=t2.getText().toString();
这样的到的st就是你的item
的id
了。
方法五:不设置监听器,在onContextItemSelected()方
法中写入代码:
AdapterView.AdapterContextMenuInfo info=(AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
String sql=”select userid from user”;
cursor=sqLiteDatabase.rawQuery(sql, null);
cursor.moveToPosition((int) info.id);
int id2=cursor.getInt(cursor.getColumnIndex(“_id”)); 这样就得到了这些你所点击的
item中的数据库
id。看上述的代码,就会发现这个和方法二类似,方法二的
position`就是这里的(int) info.id,
这个方法比方法二更简单,因为不用设置监听器。这个方法最简单。