recycleView實現item點擊更改該item顏色,其它item顏色變回


項目中需要橫向滾動效果,按照以前的思路,我會寫一個ScrollView,里邊加一個LinearLayout,在代碼中動態加入控件,然后動態刪除或者改變顏色,現在android有了新控件RecyclerView,可以方便的實現這樣的功能,具體使用方法請參考這篇文章:Android 自定義RecyclerView 實現真正的Gallery效果
主要問題在於,我點擊一個item,改變顏色,點擊其他項,改變顏色,上一次點擊的變回原來的顏色,剛開始實現的方法是在控件上直接修改,發現滑動的時候,顏色會亂掉,所以在adapter里邊加入一個list進行標記,根據標記改變控件顏色
相應的adapter

public class AddDeviceAdapter extends RecyclerView.Adapter<AddDeviceAdapter.ViewHolder> /*implements View.OnClickListener*/{ private OnItemClickListener mOnItemClickListener = null; private LayoutInflater mInflater; private List<AddDevice> mDatas; private AddDevice addDevice; private List<Boolean> isClicks;//控件是否被點擊,默認為false,如果被點擊,改變值,控件根據值改變自身顏色 public AddDeviceAdapter(Context context, List<AddDevice> datas) { mInflater = LayoutInflater.from(context); mDatas = datas; isClicks = new ArrayList<>(); for(int i = 0;i<mDatas.size();i++){ isClicks.add(false); } } public void setDatas(List<AddDevice> datas) { mDatas = datas; L.e("AddDeviceAdapter's mDatas===" + new Gson().toJson(mDatas)); } public void setOnItemClickLitener(OnItemClickListener mOnItemClickListener) { this.mOnItemClickListener = mOnItemClickListener; } @Override public int getItemCount() { return mDatas.size(); } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = mInflater.inflate(R.layout.item_add_device, viewGroup, false); ViewHolder viewHolder = new ViewHolder(view); viewHolder.viewSpace = view.findViewById(R.id.viewSpace); viewHolder.ivAddDevice = (ImageView) view.findViewById(R.id.ivAddDevice); viewHolder.tvAddDevice = (TextView) view.findViewById(R.id.tvAddDevice); //將創建的View注冊點擊事件 // view.setOnClickListener(this); return viewHolder; } @Override public void onBindViewHolder(final ViewHolder viewHolder, final int i) { addDevice = mDatas.get(i); viewHolder.ivAddDevice.setImageResource(addDevice.getResId()); viewHolder.tvAddDevice.setText(addDevice.getItemText()); //將數據保存在itemView的Tag中,以便點擊時進行獲取 viewHolder.itemView.setTag(viewHolder.tvAddDevice); if(isClicks.get(i)){ viewHolder.tvAddDevice.setTextColor(Color.parseColor("#00a0e9")); }else{ viewHolder.tvAddDevice.setTextColor(Color.parseColor("#ffffff")); } // if(addDevice.isFirst()) { // viewHolder.viewSpace.setVisibility(View.GONE); // } // 如果設置了回調,則設置點擊事件 if (mOnItemClickListener != null) { viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { for(int i = 0; i <isClicks.size();i++){ isClicks.set(i,false); } isClicks.set(i,true); notifyDataSetChanged(); mOnItemClickListener.onItemClick(viewHolder.itemView,viewHolder.tvAddDevice, i); } }); } } /* @Override public void onClick(View v) { if (mOnItemClickListener != null) { //注意這里使用getTag方法獲取數據 mOnItemClickListener.onItemClick(, textView,(int)v.getTag()); } }*/ public static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View arg0) { super(arg0); } View viewSpace; ImageView ivAddDevice; TextView tvAddDevice; } public interface OnItemClickListener { void onItemClick(View view, TextView textView,int position); } }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM