gpt4 book ai didi

android - 在 SQLite 中保存重新排序的 RecyclerView

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:04 26 4
gpt4 key购买 nike

所以我正在尝试在我的待办事项列表应用程序中实现拖放,但是我无法在移动后保存行的顺序 - 即我移动了项目,退出应用程序,它恢复到原来的位置。我想到了一个解决方案。

我的解决方案:

在我的表中创建一列:specified_position。每次移动一行时,onItemMove() 方法都会返回一个 fromPositiontoPosition。将行的位置移动到 toPosition,然后增加/更新那里和上面的所有值。每次读取表格时,它都会检查位置并根据它进行排序。

我的问题:

我的解决方案是否正确?有没有更好、更简单的方法来代替呢?非常感谢!

最佳答案

我的待办事项列表应用程序遇到了同样的问题。在这里,我与您分享我的解决方案。

首先,我的数据库助手

上有一个 updateSortID() 函数
public void updateSortID(Integer newID,int rowid)
{
SQLiteDatabase db = this.getWritableDatabase();
String strSQL = "UPDATE " + TABLE_NAME_todos + " SET " + ITEM_SORT_ID + "=" + newID + " WHERE " + ID +" = "+ rowid;

db.execSQL(strSQL);
}

然后在 Activity 或适配器上,您应该在其中收听项目的位置变化,您需要具有这样的功能。它将更新受此位置更改影响的所有项目的所有排序 ID。

@Override
public void drop(int from, int to) {
// TODO Auto-generated method stub

Log.d("drop", String.valueOf(from));
Log.d("drop", String.valueOf(to));

ArrayList<Items> temp = db.getToDos();

int tempstart = from;
int tempend = to;

if (from < to) {
Log.d("up to down", "yes");
db.updateSortID(temp.get(tempend).getSortID(), temp.get(tempstart).getID());
for (int i = from; i <= to - 1; i++) {
db.updateSortID(temp.get(i).getSortID(), temp.get(i+1).getID());
}
} else if (from > to) {
Log.d("up to down", "no");
db.updateSortID(temp.get(tempend).getSortID(), temp.get(tempstart).getID());
for (int i = from; i >= to + 1; i--) {
db.updateSortID(temp.get(i).getSortID(), temp.get(i-1).getID());
}
}

listChanged(); // this is the method I call `notifyDataSetChanged()` method and other related functions
}

关于android - 在 SQLite 中保存重新排序的 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36474658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com