I want to make selction menu for profiles using RecyclerView. I created it with RecyclerView. Now i am getting problem in onItemClickListener. I want to change background of CardView and Text Color on item select. at a time only one item can be selected. And on next button click it should redirect to activity according to selection.
This is my screen looks like:
public class SelectProfile extends AppCompatActivity {
private String[] mTextData;
private int[] mImgData;
RecyclerView recyclerView;
private ProfileAdapter profileAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select_profile);
recyclerView = findViewById(R.id.recycleProfile);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this,2);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
profileAdapter = new ProfileAdapter();
recyclerView.setAdapter(profileAdapter);
int imgData[] = {R.drawable.ic_college_icon,R.drawable.ic_parent,R.drawable.ic_student,R.drawable.ic_teaching,
R.drawable.ic_non_teaching,R.drawable.ic_other};
final String textData[] = {"School/College","Parent","Student","Teaching Staff","Non-Teaching Staff","Other"};
profileAdapter.setData(imgData,textData);
}
private class ProfileAdapter extends RecyclerView.Adapter<ProfileAdapter.ProfileAdapterViewHolder>{
int index = -1;
@NonNull
@Override
public ProfileAdapterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Context context = parent.getContext();
int layoutIdForListItem = R.layout.profile_item;
LayoutInflater layoutInflater = LayoutInflater.from(context);
boolean shouldAttachToParent = false;
View view = layoutInflater.inflate(layoutIdForListItem,parent,shouldAttachToParent);
return new ProfileAdapterViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ProfileAdapterViewHolder holder,final int position) {
int mImage = mImgData[position];
String mText = mTextData[position];
holder.img.setImageResource(mImage);
holder.txt.setText(mText);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
index = position;
notifyDataSetChanged();
}
});
if (index == position){
holder.card.setBackground(getResources().getDrawable(R.drawable.bg_select_profile));
holder.txt.setTextColor(getResources().getColor(R.color.colorPrimary));
}else {
holder.card.setCardBackgroundColor(getResources().getColor(android.R.color.white));
holder.txt.setTextColor(getResources().getColor(R.color.gray));
}
}
@Override
public int getItemCount() {
if (null == mImgData) return 0;
return mImgData.length;
}
public class ProfileAdapterViewHolder extends RecyclerView.ViewHolder {
private final AppCompatImageView img;
private final TextView txt;
private final CardView card;
private ProfileAdapterViewHolder(@NonNull View itemView) {
super(itemView);
img = itemView.findViewById(R.id.img);
txt = itemView.findViewById(R.id.txt);
card = itemView.findViewById(R.id.card);
}
}
private void setData(int[] imgData,String[] txtData){
mImgData = imgData;
mTextData = txtData;
notifyDataSetChanged();
}
}
}