2017-01-04 7 views
0

У меня был список карт, которые представляют собой серию времени, начиная с 0:00 до 23:00 с интервалом в 15 минут, то есть [0:00, 0:15, ...., 22:45, 23:00] теперь я хочу реализовать onClick на карточках, и всякий раз, когда я нажимаю на одну карту, на карточке будет установлен флажок с установленным значением true, а когда я нажимаю на другую карту, предыдущая кликнутая карта флажок будет установлен как ложные и невидимое в то время как новый будет содержать клетчатый флажок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); 


     } 
    } 
} 

Теперь проблема у меня в том, что всякий раз, когда я нажимаю на одну карту, например, 0:00, то все карты с приращением 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

Спасибо за Ваш ответ, это решает проблему, не имея других карт проверены когда я нажимаю на одной карте. Мы должны будем определить isChecked как false в классе SuggestTimeList, так как это будет пустой объект, если мы этого не сделаем. Однако, если я щелкнул вторую карту, первая карта по-прежнему будет проверена в вашей ситуации, также после прокрутки вниз и прокрутки резервной копии проверенная карта автоматически отменяется. – JerryKo

+0

Это не будет null, я использовал примитивный 'boolean'. По умолчанию это «ложь» :). Во-вторых, проблема, которую вы определили, может быть решена путем вызова 'notifyDataSetChanged();' после 'suggestTimeList.setChecked (true);' в прослушивателе кликов. –

+0

Не могли бы вы показать мне, как использовать notifyDataSetChanged? Я попытался использовать его с моим адаптером suggestTimeLists, но не смог заставить его работать. Спасибо – JerryKo

Смежные вопросы