Java SwipeToDeleteCallback-未按要求工作
我在RecyclerView中实现了“刷卡删除”,但我注意到它没有按预期工作 当应用程序第一次启动时,从数据库中收集项目并进行处理,当我刷卡时效果良好。之后,如果我将一个项目添加到列表(也添加到数据库),我将再次从数据库恢复所有项目并重新创建适配器,但是如果我滑动一个元素,SwipeToDeleteCallback中适配器的大小与数据库项目不匹配,因此我将得到一个IndexOutOfBounds错误 你能帮我吗?我不知道怎么了Java SwipeToDeleteCallback-未按要求工作,java,android,swipe,Java,Android,Swipe,我在RecyclerView中实现了“刷卡删除”,但我注意到它没有按预期工作 当应用程序第一次启动时,从数据库中收集项目并进行处理,当我刷卡时效果良好。之后,如果我将一个项目添加到列表(也添加到数据库),我将再次从数据库恢复所有项目并重新创建适配器,但是如果我滑动一个元素,SwipeToDeleteCallback中适配器的大小与数据库项目不匹配,因此我将得到一个IndexOutOfBounds错误 你能帮我吗?我不知道怎么了 public SwipeToDeleteCallback(R
public SwipeToDeleteCallback(RecyclerviewAdapter adapter) {
super(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
mAdapter = adapter;
icon = ContextCompat.getDrawable(mAdapter.getContext(), R.drawable.ic_delete);
background = new ColorDrawable(Color.RED);
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
mAdapter.deleteItem(position);
}
public void deleteItem(int position) {
mRecentlyDeletedItem = vehiculos.get(position);
mRecentlyDeletedItemPosition = position;
vehiculos.remove(position);
notifyItemRemoved(position);
showUndoSnackbar();
}
RecyclerviewAdapter recyclerviewAdapter = new RecyclerviewAdapter(context);
recyclerviewAdapter.setVehiculosList(vehiculos);
ItemTouchHelper itemTouchHelper = new
ItemTouchHelper(new SwipeToDeleteCallback(recyclerviewAdapter));
itemTouchHelper.attachToRecyclerView(recycler);
recycler.setAdapter(recyclerviewAdapter);
这是我遵循的代码:
vehiculos=new ArrayList();
数据库dbHelper=新数据库(上下文);
SQLiteDatabase db=dbHelper.getReadableDatabase();
字符串[]列=新字符串[]{
Database.SQL\u字段\u矩阵,
Database.SQL\u FIELD\u ETIQUETA,
Database.SQL\u字段\u描述
};
游标c=db.query(Database.SQL\u TABLE\u矩阵,列,null,null,null,null);
c、 moveToFirst();
而(!c.isAfterLast()){
Vehiculo Vehiculo=new Vehiculo(c.getString(c.getColumnIndex(Database.SQL\u FIELD\u MATRICULA))、c.getString(c.getColumnIndex(Database.SQL\u FIELD\u ETIQUETA))、c.getString(c.getColumnIndex(Database.SQL\u FIELD\u description));
车辆。添加(车辆);
c、 moveToNext();
}
c、 close();
db.close();
请添加用于“再次从数据库恢复所有项目并重新创建适配器”的代码@0X0nosugar Done!适配器的重新创建是来自第一篇文章的las代码。当调用新SwipeToDeleteCallback(RecycleServiceAdapter)时,RecycleServiceAdapter大小正确。很抱歉,由于我看不到你的应用程序的整个工作流,我无法判断出问题所在。这些单独的碎片看起来无害,但显然它们不适合放在一起。如果您共享了足够多的代码,以便我可以复制粘贴并运行它,那么我将研究这个问题。顺便说一句,在这种情况下,如果你不发布整个应用程序,只要代码仍然显示有问题的代码,这是非常好的behaviour@0X0nosugar我正在从RecycleServiceAdapter中的适配器中删除该项,对吗?或者我应该在活动中删除它吗?不客气:)祝你的项目好运!
vehiculos = new ArrayList<Vehiculo>();
Database dbHelper = new Database(context);
SQLiteDatabase db = dbHelper.getReadableDatabase();
String[] columns = new String[]{
Database.SQL_FIELD_MATRICULA,
Database.SQL_FIELD_ETIQUETA,
Database.SQL_FIELD_DESCRIPCION
};
Cursor c = db.query(Database.SQL_TABLE_MATRICULAS, columns, null, null, null, null, null);
c.moveToFirst();
while (!c.isAfterLast()) {
Vehiculo vehiculo = new Vehiculo(c.getString(c.getColumnIndex(Database.SQL_FIELD_MATRICULA)), c.getString(c.getColumnIndex(Database.SQL_FIELD_ETIQUETA)), c.getString(c.getColumnIndex(Database.SQL_FIELD_DESCRIPCION)));
vehiculos.add(vehiculo);
c.moveToNext();
}
c.close();
db.close();