因此,我将数据从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);
}
答案 0 :(得分:0)
您需要管理每个位置的textView状态,可以通过在pojo类中添加一个额外的字段来实现(如果您正在使用它来设置recyclerView项)。
并仅更改该位置的字段。 然后只需通过以下方式通知适配器有关更改:-
notifyItemChanged(position);
如果您没有pojo类,请使用sparseArray维护所选正电子的状态。