2017-01-04 10 views
0

私は15分の間隔で0:00から23:00までの一連の時間であるカードビューのリストを作成しました。これは[0:00、0:15、 22:45、23:00] onClickをカードに実装したいのですが、1つのカードをクリックするたびに、チェックボックスがチェックされた状態でセットされ、別のカードをクリックすると、以前にクリックされたカード新しいものがの増分でAndroid cardview onclick implentation

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

    private Context context; 

    List<SuggestTimeList> suggestTimeLists; 

    public SuggestTimeCardAdapter(List<SuggestTimeList> suggestTimeLists, Context context){ 
     super(); 
     this.suggestTimeLists = suggestTimeLists; 
     this.context = context; 
    } 

    @Override 
    public SuggestTimeCardAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.suggest_time_card, parent, false); 
     SuggestTimeCardAdapter.ViewHolder viewHolder = new SuggestTimeCardAdapter.ViewHolder(v); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(final SuggestTimeCardAdapter.ViewHolder holder, int position) { 

     SuggestTimeList suggestTimeList = suggestTimeLists.get(position); 

     holder.tvSuggestTime.setText(suggestTimeList.getSuggestTime()); 

     holder.suggest_time_card_view.setOnClickListener(new View.OnClickListener(){ 

      @Override 
      public void onClick(View v){ 
       //implement the click 
       holder.cbSuggestTime.setVisibility(View.VISIBLE); 
       holder.cbSuggestTime.setChecked(true); 
      } 
     }); 


    } 
    @Override 
    public int getItemCount() { 
     return suggestTimeLists.size(); 
    } 

    class ViewHolder extends RecyclerView.ViewHolder { 
     public TextView tvSuggestTime; 
     public CheckBox cbSuggestTime; 
     public CardView suggest_time_card_view; 


     public ViewHolder(View itemView) { 
      super(itemView); 
      tvSuggestTime = (TextView) itemView.findViewById(R.id.tvSuggestTime); 
      cbSuggestTime = (CheckBox) itemView.findViewById(R.id.cbSuggestTime); 
      suggest_time_card_view = (CardView) itemView.findViewById(R.id.suggest_time_card_view); 


     } 
    } 
} 

今私が持っている問題は、私は、たとえば夜12時のために、一枚のカードをクリックしたときに、その後、すべてのカードを確認するチェックボックスが含まれていますしながら、チェックボックスが偽と不可視に設定されます2:15がチェックされ、2:15、4:30などがすべてチェックされ、次にスクロールしながらチェックしたカードが突然チェックされなくなり、ランダムなカードがチェックされます。私はここで混乱しています、誰かが助けてくれますか?

答えて

0

SuggestTimeListクラスでは、属性を追加します。 isCheckedは、次のように:

class SuggestTimeList 
{ 
    boolean isChecked; 
    //// Other attributes and methods... 
    public void setChecked(boolean isChecked) { 
     this.isChecked = isChecked; 
    } 

    public boolean isChecked() { 
     return isChecked; 
    } 
} 

次に、あなたのアダプタでこの操作を行います。ご返信用

@Override 
public void onBindViewHolder(final SuggestTimeCardAdapter.ViewHolder holder, int position) { 

    SuggestTimeList suggestTimeList = suggestTimeLists.get(position); 

    holder.tvSuggestTime.setText(suggestTimeList.getSuggestTime()); 
    if(suggestTimeList.isChecked()) { 
      holder.cbSuggestTime.setVisibility(View.VISIBLE); 
      holder.cbSuggestTime.setChecked(true); 
    }else { 
      holder.cbSuggestTime.setChecked(false); 
      holder.cbSuggestTime.setVisibility(View.INVISIBLE); 
    } 
    holder.suggest_time_card_view.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v){ 
      //implement the click 
      holder.cbSuggestTime.setVisibility(View.VISIBLE); 
      holder.cbSuggestTime.setChecked(true); 
      for(SuggestTimeList s : suggestTimeLists) { 
       s.setChecked(false); 
      } 
      suggestTimeList.setChecked(true); 
      notifyDataSetChanged(); 

     } 
    }); 


} 
+0

おかげで、これは私が一枚のカードをクリックしたときにチェック他のカードを持っていないために問題を解決します。 SuggestTimeListクラスでisCheckedをfalseとして定義する必要があります。なぜなら、そうしないとnullオブジェクトになるからです。しかし、もし私が2番目のカードをクリックすると、最初のカードはあなたの状況でチェックされ、スクロールダウンしてスクロールした後にも、チェックされたカードは自動的にチェックされなくなります – JerryKo

+0

nullにはならず、これはデフォルトで 'false'です:)。第2に、あなたが特定した問題は、クリックリスナーで 'suggestTimeList.setChecked(true);の後に' notifyDataSetChanged(); 'を呼び出すことで解決できます。 –

+0

notifyDataSetChangedの使い方を親切に教えてもらえますか?私はアダプタのsuggestTimeListsでそれを使用しようとしましたが、動作させることができませんでした。ありがとうございました – JerryKo

関連する問題