注意:记得在activity或Fragment中调用适配器的监听,里面可以什么都不写,但必须调用才生效。
package activity_cut.merchantedition.boss.adapter; import android.content.Context; import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import activity_cut.merchantedition.R; /** * Created by DELL zhanghuirong on 2018/6/4. */ public class MyHengAdapter extends RecyclerView.Adapter<MyHengAdapter.ViewHolder> { //1、定义一个集合,用来记录选中 private List<Boolean> isClick = new ArrayList<>(); ; private Context context; private List<String> listString; private OnClickListener onClickListener; public MyHengAdapter(Context context, List<String> listString) { this.context = context; this.listString = listString; } public void setOnClickListener(OnClickListener onClickListener) { this.onClickListener = onClickListener; } @Override public MyHengAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = LayoutInflater.from(context).inflate(R.layout.heng, parent, false); ViewHolder holder = new ViewHolder(inflate); return holder; } @Override public void onBindViewHolder(final MyHengAdapter.ViewHolder holder, int position) { holder.posi.setText(position + 1 + ""); holder.names.setText(listString.get(position)); //给isClick集合添加数据 if (listString.size() > 0) { for (int i = 0; i < listString.size(); i++) { isClick.add(false); } } if (onClickListener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int position = holder.getLayoutPosition(); //判断集合是否为空,集合是否有内容(集合为空表示没有 new 这个集合对象) if (isClick != null && isClick.size() > 0) { for (int i = 0; i < isClick.size(); i++) { isClick.set(i, false); } isClick.set(position, true); notifyDataSetChanged(); } onClickListener.setOnClickItemListener(view, position); } }); } //判断集合是否为空,集合是否有内容(集合为空表示没有 new 这个集合对象) if (isClick != null && isClick.size() > 0) { if (isClick.get(position)) { holder.posi.setTextColor(ContextCompat.getColor(context, R.color.red_normal)); holder.names.setTextColor(ContextCompat.getColor(context, R.color.red_normal)); } else { holder.posi.setTextColor(ContextCompat.getColor(context, R.color.default_font_color)); holder.names.setTextColor(ContextCompat.getColor(context, R.color.default_font_color)); } } } public interface OnClickListener { void setOnClickItemListener(View view, int position); } @Override public int getItemCount() { return listString != null ? listString.size() : 0; } public class ViewHolder extends RecyclerView.ViewHolder { private TextView names; private TextView posi; public ViewHolder(View itemView) { super(itemView); posi = (TextView) itemView.findViewById(R.id.tv_position); names = (TextView) itemView.findViewById(R.id.tv_name); } } }
说一下遇到的问题,我一开始写了个demo,和参考链接写的一模一样,运行后可以运行。当我把代码粘贴到项目中,发现总是报isClick集合索引越界,我debug一下,发现另一个集合根本就没有数据,可是我把isClick集合都注释掉,运行发现,那个集合是有数据的,而且在构造方法里写的for循环的listString.size(),的集合是传过来的,并非赋值后的这个listString集合,经过千山万水,历经千辛万苦,最后终于练成了,现在你看到的最终版,它绝对不会报错,因为我加了判断。
参考链接:https://blog.csdn.net/qq_39734239/article/details/78521296