[英]How to move item to the last position when Checkbox is checked? (RecyclerView, ViewHolder)
[英]Recyclerview checkbox are checked when not clicked
我有一個帶有復選框的Recyclerview。 當用戶選中一個框時,當他們向下滾動時,另一個框將被選中。 我知道為什么,因為那個盒子被回收了,這很有意義。
但是我在設置它時遇到問題,因此它不這樣做:
我當前的onBindViewHolder:
@Override
public void onBindViewHolder(final ViewHolder holder, final int position){
holder.playerNameNumber.setText(playerData.get(position).name + "\n" +playerData.get(position).number );
holder.pickedPlayer.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View thisView){
PlayerDetails contact = new PlayerDetails();
int contactPos = position;
if(holder.pickedPlayer.isChecked()) {
contact.number = playerData.get(position).number;
contact.name = playerData.get(position).name;
playerListGame.addPlayer(contact);
String name = contact.name;
Toast.makeText(thisView.getContext(), name + " Added", Toast.LENGTH_LONG).show();
holder.pickedPlayer.setChecked(true);
}
else if(!holder.pickedPlayer.isChecked()){
contact.number = playerData.get(position).number;
contact.name = playerData.get(position).name;
for(PlayerDetails i : playerListGame.myPlayers){
if(i.name == contact.name && i.number == contact.number){
contactPos = playerListGame.myPlayers.indexOf(i);
}
}
playerListGame.removePlayer(contactPos);
String name = contact.name;
Toast.makeText(thisView.getContext(), name + " Removed", Toast.LENGTH_LONG).show();
}
}
});
}
現在我知道SetIsRecyclable是一個很大的問題,盡管它確實解決了我的問題:
public ViewHolder(View v){
super(v);
playerNameNumber = v.findViewById(R.id.playerDetails);
pickedPlayer =v.findViewById(R.id.
this.setIsRecyclable(false);
如何避免使用這種方法來解決此問題?
您還必須在數據集中使用布爾值。因此,當用戶選中或取消選中某個框時,該時間會更新受關注位置的數據集的布爾值,並調用通知項已更改
arraylist.get(pos).setDataCheked(true);
notifyItemChanged(pos);
holder.pickedPlayer.setOnCheckedChangeListener(null);
//define private boolean selected with setter and getter
holder.pickedPlayer.setChecked(playerData.isSelected());
holder.pickedPlayer.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
playerData.setSelected(isChecked);
if (isChecked)
{
Toast.makeText(context,"checked", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(context,"not checked", Toast.LENGTH_LONG).show();
}
}
});
您需要設置復選框的當前值,就像設置播放器名稱和編號一樣。 我假設它的名稱類似於在playerData中選擇的名稱。
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
holder.playerNameNumber.setText(playerData.get(position).name + "\n" +playerData.get(position).number );
holder.pickedPlayer.setChecked(playerData.get(position).picked);
// same onclick listener, removed for readability
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.