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);
}
}
recycleView实现item点击更改该item颜色,其它item颜色变回的更多相关文章
- listview 嵌套checkbox响应item点击和button点击事件
参考文档 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=182280 一.主要要点 1. CheckBox的优先级比item高. ...
- android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)
1.因为给LISTVIEW增加了两个头布局,所以在点击事件ITEM索引会增加2,比如原来第一条数据的索引应该为0,增加两个头布局后,它的索引变为 2,为了使LISTVIEW的ITEM在点 ...
- Android GridView 第一个Item 点击没反应
@Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHo ...
- ListView的Item点击事件(消息传递)
转载请保留原文出处“http://my.oschina.net/gluoyer/blog”,谢谢! 您可以到博客的“友情链接”中,“程序猿媛(最新下载)*.*”下载最新版本,持续更新!当前版本,也可直 ...
- 从源码角度入手实现RecyclerView的Item点击事件
RecyclerView 作为 ListView 和 GridView 的替代产物,相信在Android界已广为流传. RecyclerView 本是不会有类似 ListView 的那种点击事件,但是 ...
- Android ListView中Item点击事件失效解决方案
欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布 ...
- Android ListView的item背景色设置以及item点击无响应等相关问题
Android ListView的item背景色设置以及item点击无响应等相关问题 在Android开发中,listview控件是非常常用的控件,在大多数情况下,大家都会改掉listview的ite ...
- Android ListView item 点击事件失效问题的解决
关于ListView点击无效,item无法相应点击事件的问题,网上有很多, 大致可分为俩种情况, 一种是 item中存在 ImageButton 等可以点击的组件,这会抢先获得ListView的焦点. ...
- swift设置导航栏item颜色和状态栏颜色
//swift设置导航栏item颜色和状态栏颜色 let dict:Dictionary =[NSForegroundColorAttributeName:UIColor.hrgb("333 ...
随机推荐
- 移动端调试和fiddler移动端抓包使用
这里介绍一款移动端的调试工具以及抓包工具fiddler的使用.也是初次接触,算是初次接触的总结. 1,移动端调试工具.手机截图如下 代码实现 <!DOCTYPE html> <htm ...
- Flink中的数据传输与背压
一图道尽心酸: 大的原理,上游的task产生数据后,会写在本地的缓存中,然后通知JM自己的数据已经好了,JM通知下游的Task去拉取数据,下游的Task然后去上游的Task拉取数据,形成链条. 但是在 ...
- Java内存分配及垃圾回收机制
Java内存区域 1.内存区域 jvm运行时数据区域 程序计数器 Java虚拟机栈 本地方法栈 方法区 Java堆 大图 2.概念解释 程序计数器 线程私有的一块很小的内存空间,它是当前线程所执行 ...
- html5 download all in one
html5 download all in one HTML5 download & Fetch API & File API & Blob https://scarletsk ...
- 2011 Multi-University Training Contest 4 - Host by SDU
A.Color the Simple Cycle(polya计数+字符串匹配) 此题的难点在于确定置换的个数,由a[i+k]=a[i], e[i+k]=e[i]联想到KMP. 于是把原串和原串扩大两倍 ...
- BZOJ4832 抵制克苏恩(概率期望+动态规划)
注意到A+B+C很小,容易想到设f[i][A][B][C]为第i次攻击后有A个血量为1.B个血量为2.C个血量为3的期望伤害,倒推暴力转移即可. #include<iostream> #i ...
- BZOJ4869 六省联考2017相逢是问候(线段树+欧拉函数)
由扩展欧拉定理,a^(a^(a^(……^x)))%p中x作为指数的模数应该是φ(φ(φ(φ(……p)))),而p取log次φ就会变为1,也即每个位置一旦被修改一定次数后就会变为定值.线段树维护区间剩余 ...
- 函数strcat实现
1.函数原型 extern char *strcat(char *dest,const char *src); 注:在C++中,则存在于<cstring>头文件中. 2.函数功能: str ...
- 【状压DP】【UVA11825】 Hackers' Crackdown
传送门 Description 你是一个hacker,侵入了一个有着n台计算机(编号为1.2.3....n)的网络.一共有n种服务,每台计算机都运行着所有服务.对于每台计算机,你都可以选择一项服务,终 ...
- 关于javascript数组的定义与其一些常用方法总结
由于JavaScript是一门宽松的语言,这种宽松可能会带来更加麻烦的事情.比如JavaScript的数组,定义与使用的方式太灵活有时候让人迷惑.下面将JavaScript中关于数组常用的方法.定义之 ...