2017-12-18 14 views
0

RecyclerViewアイテムのセレクタバックグラウンドを追加しましたが、一度に1つのアイテム選択だけを許可する必要があります。 1つのアイテムが選択された場合、残りのアイテムはすべて選択されてはならない。どうすればこれを達成できますか?ここで Recyclerview単一アイテムセレクタ

は私のアダプタクラスである

public class VisaTypeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    Context context; 
    private List<VisaType> visaTypeList; 

    int selected_position; 


    public VisaTypeAdapter(Context context, List<VisaType> visaTypeList) { 
     this.context = context; 
     this.visaTypeList = visaTypeList; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.visa_type_row, parent, false); 
     return new jp.workjapan.adapters.VisaTypeAdapter.ViewHolder(view); 

    } 

    @Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { 
     final VisaType a = visaTypeList.get(position); 
     final jp.workjapan.adapters.VisaTypeAdapter.ViewHolder viewHolder = (jp.workjapan.adapters.VisaTypeAdapter.ViewHolder) holder; 
     viewHolder.visa_eng.setText(a.getName_en()); 
     viewHolder.visa_jp.setText(a.getName_jp()); 


     final long id = a.getId(); 
     if (id == AppSingleTon.visaType) { 
      viewHolder.visa_layout.setSelected(true); 
     } else { 
      viewHolder.visa_layout.setSelected(false); 
     } 


     viewHolder.visa_layout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (viewHolder.visa_layout.isSelected()) { 
        viewHolder.visa_layout.setSelected(false); 


       } else { 

        viewHolder.visa_layout.setSelected(true); 
        AppSingleTon.visaType = id; 
        selected_position = position; 


       } 


      } 
     }); 

    } 

} 
+0

...それはあなたのお役に立てば幸いですか!もしそうなら、 'android.R.layout.select_dialog_singlechoice'レイアウトの' ArrayAdapter'を使うべきです。 –

+0

[RecyclerViewでの単一選択](https://stackoverflow.com/questions/28972049/single-selection-in-recyclerview)の可能な複製 –

答えて

0

これは私のサンプル溶液である:

public class VisaTypeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    Context context; 
    private List<VisaType> visaTypeList; 

    int selected_position; 


    public VisaTypeAdapter(Context context, List<VisaType> visaTypeList) { 
     this.context = context; 
     this.visaTypeList = visaTypeList; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.visa_type_row, parent, false); 
     return new jp.workjapan.adapters.VisaTypeAdapter.ViewHolder(view); 

    } 

    @Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { 
     final VisaType a = visaTypeList.get(position); 
     final jp.workjapan.adapters.VisaTypeAdapter.ViewHolder viewHolder = (jp.workjapan.adapters.VisaTypeAdapter.ViewHolder) holder; 
     viewHolder.visa_eng.setText(a.getName_en()); 
     viewHolder.visa_jp.setText(a.getName_jp()); 


     final long id = a.getId(); 
     if (id == AppSingleTon.visaType) { 
      viewHolder.visa_layout.setSelected(true); 
     } else { 
      viewHolder.visa_layout.setSelected(false); 
     } 

     if (position == selected_position) { 
      viewHolder.visa_layout.setSelected(true); 
     } else { 
      viewHolder.visa_layout.setSelected(false); 
     } 

     viewHolder.visa_layout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       selected_position = getAdapterPosition(); 
       notifyDataSetChanged(); 
      } 
     }); 

    } 

} 

あなたはAlertDialog内でこのrecyclerviewを見せている おかげ

+0

このコードがOPの問題を解決する場合は、自分が行ったこととその理由を説明してください。そして、OPが間違っていた。 –

+0

これは男、ありがとう –

関連する問題