Java SwipeToDeleteCallback-未按要求工作

Java SwipeToDeleteCallback-未按要求工作,java,android,swipe,Java,Android,Swipe,我在RecyclerView中实现了“刷卡删除”,但我注意到它没有按预期工作 当应用程序第一次启动时,从数据库中收集项目并进行处理,当我刷卡时效果良好。之后,如果我将一个项目添加到列表(也添加到数据库),我将再次从数据库恢复所有项目并重新创建适配器,但是如果我滑动一个元素,SwipeToDeleteCallback中适配器的大小与数据库项目不匹配,因此我将得到一个IndexOutOfBounds错误 你能帮我吗?我不知道怎么了 public SwipeToDeleteCallback(R

我在RecyclerView中实现了“刷卡删除”,但我注意到它没有按预期工作

当应用程序第一次启动时,从数据库中收集项目并进行处理,当我刷卡时效果良好。之后,如果我将一个项目添加到列表(也添加到数据库),我将再次从数据库恢复所有项目并重新创建适配器,但是如果我滑动一个元素,SwipeToDeleteCallback中适配器的大小与数据库项目不匹配,因此我将得到一个IndexOutOfBounds错误

你能帮我吗?我不知道怎么了

    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();