多选回收站视图在android中无法正常工作

问题描述 投票:0回答:1

[当我当时滚动时,当我返回同一View时,视图持有者的位置正在改变。我想在单击项目时高亮显示我的视图持有者,然后第二次恢复正常。这是我的onBindViewHolder

 @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {

        holder.setIsRecyclable(false);

        list = cont.get(position);
        String name = (list.getName());

            holder.cont_name.setText(name);
            holder.cont_number.setText(list.getPhone());

//            System.out.println("VAL : " + list.isSelected());
        holder.itemView.setBackgroundColor(list.isSelected() ? Color.CYAN : Color.WHITE);


        holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    list.setSelected(!list.isSelected());
                    holder.itemView.setBackgroundColor(list.isSelected() ? Color.CYAN : Color.WHITE);

                }
            });

            if (list.isSelected()){
                System.out.println("selected : " + position);
            }
    }

我正在将联系人显示在“回收者”视图中,并且该视图持有者持有该视图。我有用于名称和数字的getter和setter方法。

 class ViewHolder extends RecyclerView.ViewHolder {
        public TextView cont_name;
        public TextView cont_number;
        public LinearLayout contact_select_layout, mainLL;

        public ViewHolder(View itemView) {
            super(itemView);
            this.setIsRecyclable(false);
            cont_name = itemView.findViewById(R.id.cont_name);
            cont_number = itemView.findViewById(R.id.cont_number);
            contact_select_layout =  itemView.findViewById(R.id.contact_select_layout);
            mainLL = itemView.findViewById(R.id.mainLL);
        }

    }
java android android-recyclerview recycler-adapter android-viewholder
1个回答
0
投票

更改

  holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    list.setSelected(!list.isSelected());
                    holder.itemView.setBackgroundColor(list.isSelected() ? Color.CYAN : Color.WHITE);

                }
            });

to

  holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    cont.get(position).setSelected(!cont.get(position).isSelected());
                    holder.itemView.setBackgroundColor(list.isSelected() ? Color.CYAN : Color.WHITE);
                    notifyDataSetChanged()
                }
            });

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.