1. 程式人生 > >Android recyclerview點選事件與點選更改顏色

Android recyclerview點選事件與點選更改顏色

注意:記得在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