栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何同时从recyclerView和sqlite数据库删除行?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何同时从recyclerView和sqlite数据库删除行?

首先,您需要传递

long
给delete方法,而 不是
int
。其次,您应该将 确切的rowId 传递给您的方法,而 不是
适配器的位置。因为适配器位置将始终是从0到某个数字的连续数字集,并且之间没有间隔,所以在数据库中,从表中删除数据后,某些数字将不用于rowId。例如,如果您删除第5行,则SQLite
db不再使用索引4。您将拥有0、1、2、3、5、6 …这样的行,因为它是自动递增的。

我建议您将数据存储在二维数组或ArrayList中。然后,

COL_1
从db检索数据时,也需要将相应的文本也传递给值。这样,您将始终知道哪个行号包含特定数据,并在要删除该行号时显示该行号。

因为只有一列数据,所以很容易为您显示带有二维数组的版本。

您可以将其想象成数组的数组:

mDataset->

在位置:
0 | array1
1 | arrays2
2 | array3

… | …

array1->

在位置:
0 | rowId
1 | textData

array2->

在位置:
0 | rowId
1 | textData

等等。但是您将需要更改用于从db检索数据的方法的代码,以便它将返回上述ArrayList。

代码如下所示:

在您的数据库中:

// getData methodpublic ArrayList<ArrayList<String>> getData() {    SQLiteDatabase db=this.getWritableDatabase();    String[] columns = new String[]{COL_1, COL_2};    Cursor c = ourDatabase.query(TABLE_NAME, columns, null, null, null, null, null);    int rowId = c.getColumnIndex(COL_1);    int text = c.getColumnIndex(COL_2);    ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();    for (c.moveToFirst(); !c.isAfterLast(); c.moveTonext()) {        ArrayList<String> temp = new ArrayList<String>();        temp.add(c.getString(rowId));        temp.add(c.getString(text));        data.add(temp);    }    return data;}// deleteEntry methodpublic boolean deleteEntry(long row) {    SQLiteDatabase db=this.getWritableDatabase();    db.delete(TABLE_NAME, COL_1 + "=" + row, null);    return true;}

数据集:

ArrayList<ArrayList<String>> mDataSet = //initialize or pass data

然后将其用作:

int position = mDataset.get(getAdapterPosition).get(0);boolean isDeleted = myDb.deleteEntry(Long.parseLong(position));

要么

long position = mDataset.get(getAdapterPosition).get(0);boolean isDeleted = myDb.deleteEntry(position);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515472.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号