<学习笔记>Android ListView 通过指定position改变item颜色
来源:互联网 发布:音乐视觉效果软件 编辑:程序博客网 时间:2024/04/29 17:30
ListView中点击每个item是可以通过setOnItemClickListener获取到View和position改变颜色的,也可以直接设置某个item为setSelection()选中状态来改变背景色。
但是如果我并不想设置item为选中,也不想通过点击item,而单纯只是想通过item在listview中的位置改改颜色呢?又或许我其它逻辑需要BlaBla。。。
通过ListView的getChildAt()勉强可以通过position获取到View来变色,但是众所周知getChildAt()只能获取到listView中可见的视图,对于那些out of屏幕的item怎么办?我给的position可是在整个ListView中的位置,可不只是可见视图中的位置啊。
没办法,只有重写Adapter的getView方法了。
基本思路:
1.在数据中添加一个boolean成员来判断用哪种颜色,例如isblue(蓝色?)
2.覆盖getView()。在getView()中根据isblue的值来设置item的背景颜色为蓝色或白色
3.每当我需要改变颜色时,改变数据中的isblue值,并且用Adapter的notifyDataSetChange()刷新数据
protected ListView mListView;protected SimpleAdapter mAdapter;protected List<Map<String,Object>> mList = new ArrayList<>();protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mListView = (ListView) findViewById(R.id.leftDrawerList); mAdapter = new SimpleAdapter(this,mList, R.layout.list_leftdrawer, new String[]{"title","info"}, new int[]{R.id.leftDrawerTitle,R.id.leftDrawerInfo}){ //重写getView方法,判断list中的Map是否为focus Map,如果是则背景蓝色,不是则背景白色 //通过修改mList中键值isfocus的值来修改focus item的背景色,mList中的数据变化后,调用mAdapter的notifyDataSetChanged方法可运行getView修改颜色 @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); Boolean isFocus = (Boolean) mList.get(position).get("isfocus"); if(isFocus){ view.setBackgroundColor(Color.BLUE); }else{ view.setBackgroundColor(Color.WHITE); } return view; } }; mListView.setAdapter(mAdapter);
}public void addDataToList(){//初始的item的isfocus都为false,背景色全为白色for(int i=0;i<10;i++){Map<String, Object> map = new HashMap<String, Object>(); map.put("title", i); map.put("info", "第"+i); map.put("isfocus", false); mList.add(map);}mAdapter.notifyDataSetChanged();}//改变指定position的item背景色为蓝色,即设isfocus为truepublic void setItemBGColorBlue(int position){ mList.get(position).put("isfocus", true); mAdapter.notifyDataSetChanged();}//改变指定position的item背景色为白色,即设isfocus为falsepublic void setItemBGColorWhite(int position){ mList.get(position).put("isfocus", false); mAdapter.notifyDataSetChanged();}大概如上,其它xml resource文件不再赘述,listview的用法不再赘述,不知道自己去Android developer看。
0 0
- <学习笔记>Android ListView 通过指定position改变item颜色
- Android 代码模拟ListView item的点击事件并且改变背景颜色(笔记)
- Android的ListView子Item选中改变TextView字体颜色
- 改变listview的item项的颜色、自定义expandlistview的group、item的颜色,改变、调用android.R.layout参数
- ListView中的Item中的文字改变颜色??
- listview选中项item颜色改变
- android - listview get item view by position
- Android学习笔记(十)ListView之自定义ListView Item
- 如何改变Android中 ListView的item被选中的颜色
- android listView 点击Item的时候,改变文字颜色和背景色
- Android ListView 点击Item的时候,改变文字颜色和背景色
- android如何改变listview中item选中时文字的颜色
- android listview拖拽,拖动item 改变位置
- 【Android多屏适配】动态改变Listview item高度
- android listview拖拽,拖动item 改变位置
- android的listview,怎么改变item内容?
- ListView Item 选中时 改变 TextView 的字体颜色
- 点击listview,改变item的背景颜色设置
- svn up遇到Conflict discovered in ‘*****’问题
- 格式化输入输出
- 关于手动修复Linux引导崩溃
- SDUT 3404:数据结构实验之排序七:选课名单
- docker -d启动报错解决办法
- <学习笔记>Android ListView 通过指定position改变item颜色
- 在Ubuntu上安装Docker
- openwrt下iw命令应用
- 年份,学院,专业,班级Js四级联查
- 打印倒三角
- 使用蓝灯导致其他网页访问报错
- Llinux下安装网易云和QQ
- SpringMVC @RequestBody接收Json对象字符串
- 新浪微博(2)之点击图片放大至全屏---ViewPager用法