如果在Sqlite Db中已经存在该项目,请在RecyclerView中在运行时更改TextView数据

时间:2019-03-18 11:06:58

标签: android recycler-adapter

因此,我将数据从FireStore获取到回收器视图中,我有一个TextView,所以我想在运行时更改此TextView数据,如果该行ID已存在于Sqlite Db中,则我通过检查数据库中是否存在该项目,设法在onBindViewHolder上执行此操作,然后更改textView,但是这样做 如果行的0发生了更改,那么行9也进行了更改。它只应更改位置0上的文本
我通过将setIsRecyclable设置为false来解决了这个问题...

我的问题是,为什么我必须将IsRecyclabe设置为false,如果我没有将setIsRecyclabe设置为false,为什么会导致问题,是否有更好的解决方法问题。

这是我的代码,用于检查数据是否已存在

 SQLiteDatabase db = this.getReadableDatabase();
        String query = "SELECT * FROM " + TABLE_NAME +" WHERE "+FOREIGN_ITEM_ID +" =?";
        Cursor cursor = db.rawQuery(query,new String[]{foreignID});
        if(cursor.getCount() <=0){
            cursor.close();
            db.close();
            return false;
        }
        cursor.close();
        db.close();
        return true;

这就是我在 OnbindViewHolder

中设置TextView的方式
 boolean isAlreadyExists = dbHelper.isForeignIdAlreadyExists(docId);
        if(isAlreadyExists){
            viewHolder.addToCartTV.setText("Added");
            viewHolder.addToCartTV.setTextColor(Color.GREEN);

        }

1 个答案:

答案 0 :(得分:0)

您需要管理每个位置的textView状态,可以通过在pojo类中添加一个额外的字段来实现(如果您正在使用它来设置recyclerView项)。

并仅更改该位置的字段。 然后只需通过以下方式通知适配器有关更改:-

notifyItemChanged(position);

如果您没有pojo类,请使用sparseArray维护所选正电子的状态。