Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Multi-select RecyclerView在android中无法正常工作_Java_Android_Android Recyclerview_Android Viewholder - Fatal编程技术网

Java Multi-select RecyclerView在android中无法正常工作

Java Multi-select RecyclerView在android中无法正常工作,java,android,android-recyclerview,android-viewholder,Java,Android,Android Recyclerview,Android Viewholder,当我在那个时候滚动时,当我回到同一个视图时,视图保持器的位置正在改变。我想突出显示我的视图持有人时,该项目被点击,并为第二次恢复正常。 这是我的全班同学。请帮帮我 private LayoutInflater layoutInflater; int rowIndex=-1; private int checkedPosition = 0; public List<Contacts> cont; Contacts list; priva

当我在那个时候滚动时,当我回到同一个视图时,视图保持器的位置正在改变。我想突出显示我的视图持有人时,该项目被点击,并为第二次恢复正常。 这是我的全班同学。请帮帮我


    private LayoutInflater layoutInflater;
    int rowIndex=-1;
    private int checkedPosition = 0;
    public List<Contacts> cont;
    Contacts list;
    private ArrayList<Contacts> arraylist;

//constructor
    public ContactAdapter(LayoutInflater inflater, List<Contacts> items) {
        this.layoutInflater = inflater;
        this.cont = items;
        this.arraylist = new ArrayList<Contacts>();
        this.arraylist.addAll(cont);
    }
//create View
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = layoutInflater.inflate(R.layout.activity_listview, parent, false);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }

//Bind Holder
    @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());

        holder.itemView.setBackgroundColor(list.isSelected() ? Color.CYAN : Color.WHITE);


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

                }
            });

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



    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

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

我的recyclerView调用活动片段

   adapter = new ContactAdapter(inflater, selectUsers);
            rvContacts.setHasFixedSize(true);
            rvContacts.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
            rvContacts.setAdapter(adapter);

改变


希望这有帮助

Recyclerview具有内置的重用机制。一个特定的视图持有者在滚动时实际显示不同的数据。在您的
onClick
方法中,修改数据并调用
notifyItemChange
,而不是直接访问视图。您可以发布整个适配器文件吗?我也尝试过该方法notifyItemChange。“但是仍然不能工作。@关宏煌我已经更新了适配器类。请让我know@HarshDoshi删除此行
holder.setIsRecyclable(false)
   adapter = new ContactAdapter(inflater, selectUsers);
            rvContacts.setHasFixedSize(true);
            rvContacts.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
            rvContacts.setAdapter(adapter);

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

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