Ich hatte eine Liste von cardviews erstellt, die Zeitreihen von 0:00 bis 23:00 mit einem Intervall von 15 Minuten sind, also [0:00, 0:15, ...., 22:45, 23:00] jetzt möchte ich onClick auf die Karten implementieren und wenn ich auf eine Karte klicke, wird auf der Karte ein Häkchen gesetzt mit aktiviert als gesetzt, und wenn ich auf eine andere Karte klicke, die vorher angeklickte Karte Checkbox wird gesetzt als falsch und unsichtbar, während die neuen ein getestetes CheckboxAndroid cardview onclick implementation
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);
}
}
}
Nun ich habe das Problem enthält, ist, dass, wenn ich auf einer Karte klicken, zum Beispiel 00.00, dann alle Karten mit Zuwachs von 2:15 wird überprüft, so dass 2:15, 4:30 usw. alle überprüft werden, dann beim Scrollen und nicht auf ein klicken Die checked cards werden plötzlich deaktiviert und zufällige Karten werden überprüft. Ich bin hier verwirrt, kann jemand bitte helfen?
Vielen Dank für Ihre Antwort, löst das Problem für nicht andere Karten, die überprüft, wenn ich auf eine Karte klicken. Wir müssen isChecked als false in der SuggestTimeList-Klasse definieren, da dies ein Null-Objekt ist, wenn wir dies nicht tun. Wenn ich jedoch auf die zweite Karte klicke, wird die erste Karte in Ihrer Situation noch überprüft. Auch nach dem Scrollen und Scrollen wird die markierte Karte automatisch deaktiviert – JerryKo
Es wird nicht null sein, ich habe das primitive 'boolean' verwendet. Es ist standardmäßig "falsch" :). Zweitens kann das Problem, das Sie identifiziert haben, gelöst werden, indem 'notifyDataSetChanged();' nach 'suggestTimeList.setChecked (true);' im Klick-Listener aufgerufen wird. –
Können Sie mir freundlicherweise zeigen, wie Sie notifyDataSetChanged verwenden? Ich habe versucht, es mit meinem Adapter suggestTimeLists zu verwenden, aber es konnte nicht funktionieren. Danke – JerryKo