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