簡體   English   中英

如何一次查看一個視圖 select?

[英]How to select one view at a time?

在此處輸入圖像描述

我希望在回收站視圖中一次單擊時只應選擇一個列表項。 在下面的適配器代碼中,我將列表項的背景設置為輪廓矩形,以便在單擊列表項時繪制輪廓。

我希望一次只有一個視圖保留輪廓矩形的背景,否則所有視圖都具有普通矩形作為背景。

我認為我在這里通過更改單擊時每個視圖項的背景所做的事情可以通過其他方法更輕松地完成。

如果有人有解決方案,請幫助我解決問題。

適配器代碼:

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 應該解決這個問題。 您可以查看以下答案以進一步閱讀。

getLayoutPosition() 和 getAdapterPosition() 有什么區別?

用於從列表中僅選擇一項

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM