public class ResAdapter extends RecyclerView.Adapter<ResAdapter.MyHolder> { private ArrayList<TopBean> list; private Context context; public ResAdapter(ArrayList<TopBean> list, Context context) { this.list = list; this.context = context; } private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {//第一步执行的方法 View view=View.inflate(context, R.layout.offline_item,null); MyHolder holder=new MyHolder(view); //设置条目点击事件 view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onItemClickListener.onItemClickListener((Integer) view.getTag(),view);//向接口传递数据 } }); return holder; } @Override public void onBindViewHolder(MyHolder holder, int position) {第三步,给控件赋值 TopBean top=list.get(position); holder.top.setText(top.name); if(top.state){ holder.off_cb.setChecked(true); }else{ holder.off_cb.setChecked(false); } holder.itemView.setTag(position);//通过得到itemview的Tag来进行方法间的传值 } @Override public int getItemCount() { return list.size(); } //第二步。添加控件 class MyHolder extends RecyclerView.ViewHolder{//自定义一个viewholder继承父类的viewholder来使用,更方便 private TextView top; private CheckBox off_cb; public MyHolder(View itemView) { super(itemView); top=itemView.findViewById(R.id.off_top); off_cb=itemView.findViewById(R.id.off_cb); } } //因为recycle没有条目点击事件,所有声明一个借口,用于检测条目的点击事件 public interface OnItemClickListener{ void onItemClickListener(int pos, View view); } }
//主方法里面调用的方法 private void initdata() { list = new ArrayList<>(); list.add(new TopBean("1", "新闻", true)); list.add(new TopBean("2", "娱乐", true)); list.add(new TopBean("3", "军事", true)); list.add(new TopBean("4", "北京", true)); ResAdapter ada = new ResAdapter(list, OffLine_loadActivity.this); lv.setLayoutManager(new LinearLayoutManager(this)); lv.setAdapter(ada); ada.setOnItemClickListener(new ResAdapter.OnItemClickListener() { @Override public void onItemClickListener(int pos, View view) { CheckBox off_cb=view.findViewById(R.id.off_cb); TopBean top=list.get(pos); if (off_cb.isChecked()) { off_cb.setChecked(false); top.state = false; } else { off_cb.setChecked(true); top.state = true; } list.set(pos,top); } }); }