首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RecyclerView多选-安卓

RecyclerView多选-安卓
EN

Stack Overflow用户
提问于 2016-09-02 22:13:35
回答 2查看 765关注 0票数 0

我有带项目的RecyclerView。对于该RecyclerView,我正在创建我的自定义适配器。当我选择一行时,我会更改该视图的背景颜色。问题是,当RecyclerView有很多项时,当我单击一行时,应用程序会更改该视图的背景色,但它也会更改另一行的背景色。

我的适配器代码:

代码语言:javascript
运行
复制
public class NarackiAdapter extends RecyclerView.Adapter<NarackiAdapter.MyViewHolder> {

    private LayoutInflater inflater;
    private List<TableItems> items = new ArrayList<>();
    private List<TableItems> selected = new ArrayList<>();

    public NarackiAdapter(Context context, List<TableItems> items) {
        inflater = LayoutInflater.from(context);
        this.items = items;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.one_item, parent, false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {
        final TableItems item = items.get(position);

        holder.tvName.setText(item.getQuantity() + " " + item.getProducts().getName());
    }

    @Override
    public int getItemCount() {
        return items.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private TextView tvName;

        public MyViewHolder(View itemView) {
            super(itemView);

            tvName = (TextView) itemView.findViewById(R.id.tvName);

            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            if (getBackgroundColor(view) == R.color.primary) {
                view.setBackgroundResoucre(R.color.light_gray);
                selected.remove(items.get(getAdapterPosition()));
            } else {
                view.setBackgroundResoucre(R.color.primary);
                selected.add(items.get(getAdapterPosition()));
            }
        }
    }
}
EN

Stack Overflow用户

发布于 2016-09-02 23:43:41

RecyclerView重用视图!因此,如果您更改了一个视图的backgroundColor,当RecyclerView重用该视图时,重用将具有相同的backgroundcolor。避免这种错误行为的方法是在bindViewHolder方法中实现持有者更改,因为每次重用视图时都会调用该方法。因此,bindViewHolder方法应该评估数据并决定如何显示视图。您的onClick函数应该编辑此数据并调用adapter.notifyItemChanged(itemPosition)adapter.NotifyDataChanged()

票数 -1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39294511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档