滚动后如何在 RecyclerView 中保存按钮状态?
How to save button state in RecyclerView after scrolling?
在 onBindViewHolder
中,我通过检查该产品的 ID 是否在特定列表中来设置按钮的不同状态:
ArrayList<String> compareProducts = CompareManager
.getProducts(context).getProducts();
if (compareProducts.contains(item.getId())) {
holder.compara.setText(context.getString(R.string.icon_checked));
}
但是在滚动时,选中的按钮会出现在不同的位置,从而变得混乱。据我了解,在重用视图时,RecyclerView
使用了错误的视图。但是,如果我通过该产品的 ID 进行检查,为什么会发生这种情况呢?
更新
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
// setting up other data from the view
// then change button if product was added in compare before (as mentioned before)
// then set button click listener
holder.compara.setOnClickListener(new View.OnClickListener() {
// change the button state
// and save the ID to CompareManager which saves data to SharedPreferences
//then set holder tag
holder.itemView.setTag(item);
在检查 item.getId() 之前将视图重置为默认状态,因此如果在之前的回收视图中检查过它,它不会重新使用它并重置为默认状态。
在 onBindViewHolder
中,我通过检查该产品的 ID 是否在特定列表中来设置按钮的不同状态:
ArrayList<String> compareProducts = CompareManager
.getProducts(context).getProducts();
if (compareProducts.contains(item.getId())) {
holder.compara.setText(context.getString(R.string.icon_checked));
}
但是在滚动时,选中的按钮会出现在不同的位置,从而变得混乱。据我了解,在重用视图时,RecyclerView
使用了错误的视图。但是,如果我通过该产品的 ID 进行检查,为什么会发生这种情况呢?
更新
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
// setting up other data from the view
// then change button if product was added in compare before (as mentioned before)
// then set button click listener
holder.compara.setOnClickListener(new View.OnClickListener() {
// change the button state
// and save the ID to CompareManager which saves data to SharedPreferences
//then set holder tag
holder.itemView.setTag(item);
在检查 item.getId() 之前将视图重置为默认状态,因此如果在之前的回收视图中检查过它,它不会重新使用它并重置为默认状态。