[英]Saving State of a ToggleButton in a RecyclerView in android
我有一個recyclerView,它從輸出json的url中獲取數據,並使用畢加索和其他一些數據加載圖像。 視圖中的每個項目都有一個圖像,名稱,日期和一個ToggleButton。
我為切換按鈕實現了setOnCheckedChangeListener,以將切換到的圖像添加到數據庫中。
我想做的是,當用戶關閉應用程序並再次打開它時,我希望之前已切換並保存在數據庫中的項目將其切換按鈕設置為true。
即使數據庫中只有一個值,重啟應用程序時也會激活多個切換按鈕。
如何避免這種情況,有沒有更好的方法來實現呢?
注意:此處僅添加部分代碼。
@Override
public void onBindViewHolder(final ImagesViewHolder imagesViewHolder, final int position) {
imagesViewHolder.toggleFavorite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
database.saveLiked(currentImage, mScreenWidth);
} else {
// The toggle is disabled
}
}
});
for (Image image : database.getAllData()) {
if (image.getUrl().equals(currentImage.getUrl())) {
imagesViewHolder.toggleFavorite.setChecked(true);
break;
}
}
}
saveLiked方法
public void saveLiked(Image currentImage,int mScreenWidth) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_IMAGE_CATNAME, currentImage.getAuthor());
values.put(KEY_IMAGE_URL, currentImage.getUrl());
// Inserting Row
db.insert(TABLE_NAME, null, values);
db.close(); // Closing database connection
}
您不僅應該打開,而且也應該關閉。 即嘗試更改此
for (Image image: database.getAllData()) {
if (image.getUrl().equals(currentImage.getUrl())) {
imagesViewHolder.toggleFavorite.setChecked(true);
break;
}
}
對此
// unchecked by default, unless proven checked below
imagesViewHolder.toggleFavorite.setChecked(false);
for (Image image: database.getAllData()) {
if (image.getUrl().equals(currentImage.getUrl())) {
imagesViewHolder.toggleFavorite.setChecked(true);
break;
}
}
RecyclerView通過僅將新數據綁定到視圖來重用視圖,因此您的問題可能會出現,因為RV重新使用以前切換按鈕的視圖,並且在重新綁定到新數據時不會重置其“切換”狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.