作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 onBindViewHolder
中,我通过检查该产品的 id 是否在特定列表中来设置按钮的不同状态:
ArrayList<String> compareProducts = CompareManager
.getProducts(context).getProducts();
if (compareProducts.contains(item.getId())) {
holder.compara.setText(context.getString(R.string.icon_checked));
}
但是在滚动时,选中的按钮会出现在不同的位置,从而变得困惑。据我了解,在重用 View 时,RecyclerView
使用了错误的 View 。但是,如果我通过该产品的 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() 之前将 View 重置为默认状态,这样如果在之前的回收 View 中检查过它,它就不会重新使用它并重置为默认状态。
关于android - 滚动后如何在 RecyclerView 中保存按钮状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32349035/
我是一名优秀的程序员,十分优秀!