滚动后如何在RecyclerView中保存按钮状态?

时间:2015-09-02 09:09:43

标签: android android-recyclerview

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); 

1 个答案:

答案 0 :(得分:2)

在检查item.getId()之前将视图重置为默认状态,因此如果在上一个循环视图中选中了该视图,则不会重复使用该视图并重置为默认状态。