我將數(shù)據(jù)庫的數(shù)據(jù)顯示在listview上時(shí),想通過長按listview顯示菜單,菜單中包含刪除和更新操作,通過長按listview顯示菜單,可以通過復(fù)寫
onCreateContextMenu()和onContextItemSelected()方法來實(shí)現(xiàn),這個(gè)很簡單,在這里就不贅述了,重點(diǎn)在于當(dāng)我們進(jìn)行刪除操作時(shí),如何刪除
這一項(xiàng),也就是我們需要得到這個(gè)item中的數(shù)據(jù),比如id,這個(gè)id是數(shù)據(jù)庫的id,而不是item的id,這兩個(gè)是不相同的,因?yàn)楫?dāng)我們刪除其中的某
一個(gè)item時(shí),item的id和數(shù)據(jù)庫的id就會不同。那么我們?nèi)绾蔚玫綌?shù)據(jù)庫的id呢?這里提供五種種方法:
方法一:讓listview設(shè)置監(jiān)聽器,這里需要提一下,我們最好是設(shè)置長按監(jiān)聽器,不然的話,你點(diǎn)擊一下,得到了id,然后還要再長按一次,得到菜單,
因?yàn)殚L按只會觸發(fā)OnItemLongClickListener,不會觸發(fā)OnItemClickListener,當(dāng)然你可以讓OnItemLongClickListener返回的是false,這樣就不會攔截事件了,但是只需要設(shè)置一個(gè)監(jiān)聽器豈不是更好,所以最好設(shè)置長按監(jiān)聽器。然后在其中寫入如下代碼:
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,如果你使用的是系統(tǒng)的布局,那么你的對應(yīng)的id就是android.R.i d.text1,然后第三行就不用解釋了,這樣就得到了數(shù)據(jù)庫中的id,當(dāng)然你還可以得到別的很多數(shù)據(jù)。
方法二:
讓listview設(shè)置監(jiān)聽器,然后用到游標(biāo),在監(jiān)聽器中加入如下代碼:
String sql="select userid from user";
cursor=sqLiteDatabase.rawQuery(sql, null);
cursor.moveToPosition(position);
int id2=cursor.getInt(cursor.getColumnIndex("userid"));
這樣就得到了這些你所點(diǎn)擊的item中的數(shù)據(jù)庫id。
方法三:
讓listview設(shè)置監(jiān)聽器,然后寫入如下代碼:
HashMap<String, String> h1= (HashMap<String, String>) parent.getItemAtPosition(position);
h1.get("userid");
這個(gè)方法第一行代碼得到的是每一個(gè)item的值,注意是item的值,這里的item是HashMap結(jié)構(gòu)的。這與第一中方法不同,第一種方法的第一行代碼是得到item的布局
第二行代碼是取值,因?yàn)槭?code>HashMap結(jié)構(gòu)的,所以采用這個(gè)方式取值,其中"userid"是鍵。
方法四:
不設(shè)置監(jiān)聽器,在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了。
方法五:不設(shè)置監(jiān)聽器,在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")); 這樣就得到了這些你所點(diǎn)擊的item中的數(shù)據(jù)庫id。看上述的代碼,就會發(fā)現(xiàn)這個(gè)和方法二類似,方法二的position`就是這里的(int) info.id,
這個(gè)方法比方法二更簡單,因?yàn)椴挥迷O(shè)置監(jiān)聽器。這個(gè)方法最簡單。
點(diǎn)擊listview時(shí)得到item中的數(shù)據(jù)的方式
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 本人初學(xué)Android,最近做了一個(gè)實(shí)現(xiàn)安卓簡單音樂播放功能的播放器,收獲不少,于是便記錄下來自己的思路與知識總結(jié)...
- 前言 具體實(shí)現(xiàn) 一、準(zhǔn)備Activity和ListView Activity要繼承ListActivity或App...
- 2017年5月17日 Kylin_Wu 標(biāo)注(★☆)為考綱明確給出考點(diǎn)(必考) 常見手機(jī)系統(tǒng)(★☆) And...
- 簡介 在Android開發(fā)中ListView是比較常用的組件。 以列表的形式展示具體內(nèi)容。 并且能夠根據(jù)數(shù)據(jù)的長度...