簡體   English   中英

在Android的RecyclerView中保存ToggleButton的狀態

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM