[英]Android cardview onclick implementation
我列出了一張卡片視圖列表,這些視圖序列的時間范圍是從0:00到23:00,間隔為15分鍾,即[0:00,0:15,....,22:45、23:00 ]現在,我想對卡片實施onClick,每當我單擊一張卡片時,卡片中都會有一個復選框,其選中狀態設置為true;當我單擊另一張卡片時,先前單擊的卡片復選框將設置為false,不可見,而新的將包含一個選中的復選框
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等。滾動而不單擊任何內容,則選中的卡會突然變為未選中狀態,並且將對隨機卡進行檢查。 我很困惑,有人可以幫忙嗎?
在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();
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.