简体   繁体   中英

How to select one view at a time?

在此处输入图像描述

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

getLayoutPosition should resolve this. You may check below answer for further read.

What is the difference between getLayoutPosition() and getAdapterPosition()?

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM