I want that in the recycler view only one list item should be selected on click at a time. In the adaptor code below I am setting the background of list item to be outlined rectangle , so that an outline is drawn when list item is clicked.
I wanted that at one time only one view remain with background of outlined rectangle else all views have normal rectangle as background.
I think what I am doing here by changing the background of each view item on click can be done more easily by some other method.
Please help me solving the issue if anyone has the solution to it.
Code for the Adapter:
public class LanguageListAdapter extends RecyclerView.Adapter<LanguageListAdapter.ViewHolder>{
private List<String> languages;
private LayoutInflater inflater;
private AdapterView.OnItemClickListener itemClickListner;
LanguageListAdapter(Context context, List<String> languages1) {
this.inflater = LayoutInflater.from(context);
this.languages = languages1;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.widget_languagelist, null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String language = languages.get(position);
char langIconChar = language.charAt(0);
holder.txtView1.setText(language);
holder.langicon.setText(langIconChar+"");
}
@Override
public int getItemCount() {
return languages.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView txtView1,langicon;
ConstraintLayout layout;
ViewHolder(View itemView) {
super(itemView);
txtView1 = itemView.findViewById(R.id.languagename);
langicon = (TextView) itemView.findViewById(R.id.langicon);
layout = itemView.findViewById(R.id.itemLayout);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
int itemPosition = getAdapterPosition();
String item = languages.get(itemPosition);
// Toast.makeText(view.getContext(), "Item Taped : " + item, Toast.LENGTH_LONG).show();
Context context = view.getContext();
view.setBackgroundResource(R.drawable.language_rect_outlined);
SharedPreferences AppLanguage = context.getSharedPreferences("AppLanguage",MODE_PRIVATE);
SharedPreferences.Editor editor = AppLanguage.edit();
editor.putString("language", item.toLowerCase());
editor.apply();
}
}
String getItem(int id) {
return languages.get(id);
}
void setClickListener(ItemClickListener ItemClickListener) {
this.itemClickListner = (AdapterView.OnItemClickListener) ItemClickListener;
}
public interface ItemClickListener {
void onItemClick(View view, int position);
}
}
for selecting only one item from list
private var selectedItemPosition = 0
override fun onBindViewHolder(holder: LayoutAdapter.LayoutViewHolder, position: Int) {
if (selectedItemPosition == position){
//set item View selected, show Outer line
}else{
//set item View unselected, hide Outer line
}
holder.itemView.setOnClickListener {
if (selectedItemPosition != holder.adapterPosition){
selectedItemPosition = holder.adapterPosition
notifyDataSetChanged()
}
}
}