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 ...
随机推荐
- arp_ignore
上一篇文件说了arp_announce,那么到这里arp_ignore,我们直接看代码应该也比较容易立即了 目前我知道的是arp_ignore = 0,只要IP是自己机器上的,都可以回复: 说实话就是 ...
- el语句 的 变量只能从域对象中获取 所以需要先添加到域对象
el语句 的 变量只能从域对象中获取 所以需要先添加到域对象
- bzoj3864-hdu4899-Hero meet devil
题目 给出一个由AGTC组成的字符串\(S\),长度为\(n\),对于每个\(i\in [0,n]\),问有多少个长度为\(m\),仅含有AGTC的字符串\(T\)使得\(S\)与\(T\)的最长公共 ...
- BZOJ 1296 粉刷匠(分组背包套DP)
刚开始往网络流的方向想.建不出图... 因为每次只能对一行进行染色.每一行都是独立的. 对于每一行,因为格子只能染一次,所以可以发现这是一个多阶段决策问题,这个决策就是当前格子染0还是染1. 令dp[ ...
- JavaScript-序列化及转义
1. for循环: while循环: 2. 条件语句: 类似于if else的功能. name='1'; switch(name){ case:'1': console.log(123); brea ...
- [ZJOJ2007]时态同步 贪心
不是很懂为什么luogu标签是树形DP,感觉我想的就是一个贪心啊... 随机造几组数据,我们发现贪心的确可以得到最优解,那么为什么呢? 假设将所有时态贪心的调整是对的,那么如果一个节点的各个儿子时态不 ...
- POJ1651:Multiplication Puzzle——题解
http://poj.org/problem?id=1651 题目大意:同“乘法游戏”,这里将乘法游戏的题面复制过来. 乘法游戏是在一行牌上进行的.每一张牌包括了一个正整数.在每一个移动中,玩家拿出一 ...
- nowcoder OI 周赛 最后的晚餐(dinner) 解题报告
最后的晚餐(dinner) 链接: https://www.nowcoder.com/acm/contest/219/B 来源:牛客网 题目描述 \(\tt{**YZ}\)(已被和谐)的食堂实在是太挤 ...
- RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件
SIFT源码分析系列文章的索引在这里:RobHess的SIFT源码分析:综述 imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特 ...
- 爬虫服务集群处理nginx返回504
最近在对爬虫服务做分布式服务的时候总是遇到服务器返回504,搞了两天才发现原来是nginx中有对超时的设置参数,自己都是用默认的,然而客户端的等待时间超过了nginx默认的超时设置 修改 keepal ...