繁体   English   中英

Android cardview onclick实现

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM