Edit
Solved issue by removing two lines
holder.checkbox.setChecked(mListenerList.get(position).isSelected());
holder.checkbox.setChecked(mListenerList.get(position).isSelected2());
And By Adding
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
I am not editing my original code for future developers.
Main Question before Edit Start from Here
I am working on fantasy cricket app where I am selecting the captain and vice captain from a list of 11 player.
I am using a checkbox for selecting the captain and vice captain.
The selection of checkbox is working fine with my code, but the issue is when I select 1st player as a captain(C) and 2nd player as Vice-Captain(VC) and then scroll the list the checkbox state is changing and showing other player selected.
So is there any right way to do that thing?
I have tried many way they are working when there is single checkbox but in my case there is two and only one can be select from the list.
Please refer to the attached screenshots on the bottom for clarity.
Adapter Class
public class AdapterFinalTeamList extends RecyclerView.Adapter<AdapterFinalTeamList.MyViewHolder> {
private List<BeanDBTeam> mListenerList;
Context mContext;
private CheckBox lastChecked = null;
private int lastCheckedPos = 0;
private CheckBox lastChecked2 = null;
private int lastCheckedPos2 = 0;
private RadioButton lastCheckedRB = null;
private RadioButton lastCheckedRB1 = null;
TextView PreviousCaptain = null;
TextView PreviousVC = null;
public AdapterFinalTeamList(List<BeanDBTeam> mListenerList, Context context) {
mContext = context;
this.mListenerList = mListenerList;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv_PlayerName,tv_SelectCaptain,tv_SelectViceCaptain, tv_PlayerTeamName, tv_PlayerPoints,tv_TeamNumber;
ImageView im_PlayerImage,im_onetwox;
CheckBox checkbox,checkbox2;
RadioGroup radiogroup;
RadioButton radio,radio2;
public MyViewHolder(View view) {
super(view);
tv_PlayerName =view.findViewById(R.id.tv_PlayerName);
tv_PlayerTeamName = view.findViewById(R.id.tv_PlayerTeamName);
tv_PlayerPoints = view.findViewById(R.id.tv_PlayerPoints);
im_PlayerImage = view.findViewById(R.id.im_PlayerImage);
im_onetwox = view.findViewById(R.id.im_onetwox);
tv_TeamNumber = view.findViewById(R.id.tv_TeamNumber);
tv_SelectViceCaptain = view.findViewById(R.id.tv_SelectViceCaptain);
tv_SelectCaptain= view.findViewById(R.id.tv_SelectCaptain);
checkbox= view.findViewById(R.id.checkbox);
checkbox2= view.findViewById(R.id.checkbox2);
radiogroup= view.findViewById(R.id.radiogroup);
radio= view.findViewById(R.id.radio);
radio2= view.findViewById(R.id.radio2);
}
}
@Override
public int getItemCount() {
return mListenerList.size();
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.adapter_final_list, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
String id = mListenerList.get(position).getMatchId();
String arrayList = (mListenerList.get(position).getPlayerData());
try {
JSONObject job = new JSONObject(arrayList);
String PlayerName = job.getString("name");
String PlayerImage = job.getString("image");
String PlayerPoints = job.getString("player_points");
String PlayerCredit = job.getString("credit_points");
String TeamShortName = job.getString("team_short_name");
String team_number = job.getString("team_number");
String player_shortname = job.getString("player_shortname");
holder.tv_TeamNumber.setText(team_number);
// PlayerTeam= job.getString("short_name");
holder.tv_PlayerName.setText(PlayerName);
holder.tv_PlayerPoints.setText(PlayerPoints);
holder.tv_PlayerTeamName.setText(TeamShortName);
Glide.with(activity).load(Config.PLAYERIMAGE + PlayerImage)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(holder.im_PlayerImage);
} catch (JSONException e) {
e.printStackTrace();
}
holder.checkbox.setChecked(mListenerList.get(position).isSelected());
holder.checkbox.setTag(new Integer(position));
holder.checkbox.setChecked(mListenerList.get(position).isSelected2());
holder.checkbox2.setTag(new Integer(position));
holder.checkbox.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
int clickedPos = ((Integer) cb.getTag()).intValue();
holder.checkbox2.setChecked(false);
if (cb.isChecked()) {
if (lastChecked != null) {
mListenerList.get(lastCheckedPos).setSelected(false);
lastChecked.setChecked(false);
}
else if (clickedPos==position){
lastCheckedPos = clickedPos;
lastChecked = cb;
lastChecked.setChecked(true);
}
lastCheckedPos = clickedPos;
lastChecked = cb;
} else
lastChecked = null;
try {
lastChecked.setChecked(true);
}
catch (Exception e){
e.printStackTrace();
}
mListenerList.get(clickedPos).setSelected(cb.isChecked());
CaptainId = mListenerList.get(position).getPlayerId();
}
});
holder.checkbox2.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
int clickedPos = ((Integer) cb.getTag()).intValue();
holder.checkbox.setChecked(false);
if (cb.isChecked()) {
if (lastChecked2 != null) {
lastChecked2.setChecked(false);
mListenerList.get(lastCheckedPos2).setSelected(false);
}
else if (clickedPos==position){
lastChecked2 = cb;
lastCheckedPos2 = clickedPos;
lastChecked2.setChecked(true);
}
lastChecked2 = cb;
lastCheckedPos2 = clickedPos;
} else
lastChecked2 = null;
try{
lastChecked2.setChecked(true);
}
catch (Exception e){
e.printStackTrace();
}
mListenerList.get(clickedPos).setSelected2(cb.isChecked());
ViceCaptainId = mListenerList.get(position).getPlayerId();
}
});
}
}
adapter_final_list.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res /android"
android:layout_width="match_parent"
android:background="@color/white"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:padding="5dp"
android:id="@+id/RL_PlayerListMain"
android:elevation="0dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_TeamNumber"
android:visibility="invisible"/>
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/logo"
android:layout_centerVertical="true"
android:id="@+id/im_PlayerImage"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:id="@+id/RL_Name"
android:layout_toRightOf="@+id/im_PlayerImage"
android:layout_marginLeft="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Player Name"
android:id="@+id/tv_PlayerName"
android:textColor="#1e1e1e"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:layout_below="@+id/tv_PlayerName">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="IND"
android:layout_gravity="center"
android:layout_marginRight="5dp"
android:id="@+id/tv_PlayerTeamName"
android:textColor="#1e1e1e"
/>
<View
android:layout_width="1dp"
android:layout_height="10dp"
android:layout_gravity="center"
android:background="#8e8e8e"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="55 Points"
android:layout_gravity="center"
android:id="@+id/tv_PlayerPoints"
android:textColor="#8e8e8e"
android:layout_marginLeft="5dp"
/>
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:id="@+id/RL_Credit"
android:layout_alignParentRight="true">
<TextView
android:layout_width="40dp"
android:layout_height="40dp"
android:text="C"
android:padding="10dp"
android:textAlignment="center"
android:gravity="center"
android:visibility="gone"
android:layout_centerVertical="true"
android:background="@drawable/circle_captain_vc_back"
android:id="@+id/tv_SelectCaptain"
android:textColor="#1e1e1e"
android:layout_marginLeft="10dp"
/>
<CheckBox
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_toRightOf="@+id/tv_SelectViceCaptain"
android:layout_centerVertical="true"
android:visibility="visible"
android:text="C"
android:textColor="#1e1e1e"
android:gravity="center"
android:button="@android:color/transparent"
android:background="@drawable/radio_selector"
android:id="@+id/