recycleView实现item点击更改该item颜色,其它item颜色变回

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); } }
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
以下是一个使用RecyclerView实现item点击事件的Java代码示例: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<String> mDataList; public MyAdapter(List<String> dataList) { mDataList = dataList; } public interface OnItemClickListener { void onItemClick(View view, int position); } private OnItemClickListener mOnItemClickListener; public void setOnItemClickListener(OnItemClickListener listener) { mOnItemClickListener = listener; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); final MyViewHolder viewHolder = new MyViewHolder(itemView); viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mOnItemClickListener != null) { mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); } } }); return viewHolder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.mTextView.setText(mDataList.get(position)); } @Override public int getItemCount() { return mDataList.size(); } class MyViewHolder extends RecyclerView.ViewHolder { TextView mTextView; MyViewHolder(View itemView) { super(itemView); mTextView = itemView.findViewById(R.id.tv_item); } } } ``` 在上述代码中,我们定义了一个`MyAdapter`类,它继承自`RecyclerView.Adapter`。通过实现`onCreateViewHolder`、`onBindViewHolder`和`getItemCount`方法来创建和绑定列表项。我们还定义了一个`OnItemClickListener`接口,当列表项被点击时,我们会回调该接口中的`onItemClick`方法。在`onCreateViewHolder`方法中,我们为每个列表项的`itemView`设置了一个点击事件监听器,当该项被点击时,我们会调用`mOnItemClickListener.onItemClick`方法来回调接口中的方法。 在使用上述代码时,您需要实例化`MyAdapter`类,并将其设置为RecyclerView的适配器。然后,您可以通过调用`setOnItemClickListener`方法来设置列表项的点击事件监听器。在回调方法中,您可以执行您需要的逻辑操作。 注意:上述代码仅为示例代码,您需要根据您自己的需求和实际情况进行修改和调整。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值