第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用光標(biāo)獲取項(xiàng)目的位置并刪除它?

如何使用光標(biāo)獲取項(xiàng)目的位置并刪除它?

繁花不似錦 2024-01-28 16:45:57
我正在制作包含書(shū)簽的webview應(yīng)用程序,我使用Cursor和SQLite 數(shù)據(jù)庫(kù)成功將項(xiàng)目添加到listView中,但我的問(wèn)題是我無(wú)法獲取項(xiàng)目的位置并刪除它我嘗試以自己的方式執(zhí)行此操作,但我得到的是我已經(jīng)刪除了列表視圖的所有內(nèi)容。這是我的MainActivity,我制作了一個(gè)longClickItemListener來(lái)刪除長(zhǎng)按時(shí)的列表視圖項(xiàng)目,這是我的BookmarkDatabase主要活動(dòng)final Dialog bookmarksScreen = new Dialog(this);        bookmarksScreen.requestWindowFeature(Window.FEATURE_NO_TITLE);        bookmarksScreen.setContentView(R.layout.activity_bookmark);        bookmarksScreen.setCancelable(true);        final ListView listView = bookmarksScreen.findViewById(R.id.bookmark_list);        ImageView bookmarkBack   = bookmarksScreen.findViewById(R.id.close_bookmarks);        ImageView bookmarkDelete = bookmarksScreen.findViewById(R.id.delete_table);        // populate an ArrayList<String> from the database and then view it        final ArrayList<String> theList = new ArrayList<>();        Cursor data = bookmarkDB.getListContents();        // check if there is no data on database        if(data.getCount() == 0){            Log.d("Database Bookmark", "There is no items on item list");        } else {            while(data.moveToNext()) {                // add data into table "COL1" and "COL2"                theList.add(data.getString(1));                ListAdapter listAdapter = new ArrayAdapter<>(this, R.layout.activity_listitem, theList);                listView.setAdapter(listAdapter);            }        }        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                String item = parent.getItemAtPosition(position).toString();                webView.loadUrl(item);                bookmarksScreen.dismiss();            }        });
查看完整描述

1 回答

?
ITMISS

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊

理想情況下,您將在視圖中可檢索的地方使用主鍵(或者反之亦然,使用已在可檢索的地方使用的值作為主鍵)。由于這里的主鍵是一個(gè)auto_increment字段,因此它與您嘗試刪除的視圖之間沒(méi)有真正可靠的關(guān)聯(lián)(至少?gòu)奈以谀拇a中看到的)。一種方法是Adapter為您的列表使用自定義項(xiàng),而不是ArrayAdapter, 并使用View.setTag()View.getTag()方法來(lái)存儲(chǔ)列表中每個(gè)項(xiàng)目的主鍵。

假設(shè)您的activity_listitem布局有一個(gè)TextViewwith id?text_view,您在其中顯示從數(shù)據(jù)庫(kù)獲取的文本,并且您已添加存儲(chǔ)主鍵的標(biāo)簽,您可以在主活動(dòng)中執(zhí)行以下操作:

? ? listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

? ? ? ? @Override

? ? ? ? public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

? ? ? ? ? ? TextView textView = (TextView) view.findViewById(R.id.text_view);

? ? ? ? ? ? final Integer which_item = (Integer) textView.getTag();? ? //Assuming you stored the ID as an Integer

? ? ? ? ? ? int rowsDeleted = bookmarksDB.deleteSpecificContent(which_item);

? ? ? ? ? ? if(rowsDeleted == 0){? //should be 1, since we're deleting by Primary Key

? ? ? ? ? ? ? ? //if you would like like, handle if nothing was deleted

? ? ? ? ? ? }

? ? ? ? ? ? return true;

? ? ? ? }

? ? });

在您的 BookmarksDatabase 類(lèi)中:


? ? public int deleteSpecificContents(int id) {

? ? ? ? SQLiteDatabase db = this.getWritableDatabase();

? ? ? ? return db.delete(TABLE_NAME, COL1 + "=?", new String[]{Integer.toString(id)});

? ? }


如果您不想使用自定義Adapter,另一種方法是使用列表中的位置來(lái)確定要?jiǎng)h除的項(xiàng)目。您可以通過(guò)查詢(xún)數(shù)據(jù)庫(kù)并迭代Cursor直到它與列表中項(xiàng)目的位置匹配來(lái)完成此操作。


? ? listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

? ? ? ? @Override

? ? ? ? public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

? ? ? ? ? ? Cursor data = bookmarkDB.getListContents();

? ? ? ? ? ? int i = 0;

? ? ? ? ? ? while(data.moveToNext()){

? ? ? ? ? ? ? ? if(i == position){

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? i++;

? ? ? ? ? ? }

? ? ? ? ? ? int rowsDeleted = bookmarkDB.deleteSpecificContent(data.getInt(0));

? ? ? ? ? ? //again, handle if rowsDeleted != 1 if you want

? ? ? ? ? ? return true;

? ? ? ? }

? ? });

您的BookmarkDatabase.deleteSpecificContent()方法與第一種方法完全相同 - 唯一的區(qū)別在于如何確定要?jiǎng)h除的項(xiàng)目的 id。如果您不想處理deleteSpecificContent()不返回 1 的情況(除非我在這里遺漏了一些主要內(nèi)容,否則在您的用例中它應(yīng)該始終返回 1),請(qǐng)隨意將其簽名更改為void, 而不是int。


請(qǐng)注意,第二種方法比第一種方法更昂貴,因?yàn)樗枰~外的數(shù)據(jù)庫(kù)查詢(xún),并且可能會(huì)迭代很多Cursor。雖然它需要更少的新/更改的代碼,但可能不建議使用(老實(shí)說(shuō)我不能肯定地說(shuō)。這可能適合您的用例,具體取決于您的數(shù)據(jù)庫(kù)的大小,但是 - 完全披露 - 我是沒(méi)有足夠的 Android 經(jīng)驗(yàn)來(lái)?yè)艽虼穗娫?huà)。請(qǐng)自行決定使用)。


查看完整回答
反對(duì) 回復(fù) 2024-01-28
  • 1 回答
  • 0 關(guān)注
  • 163 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)