笔记56--listview之selector、listview中同一时刻只有一个item能被选中
2014-07-07 22:54
507 查看
notifyDataSetChanged():只会刷新数据,不会刷新控件?比如,控件的显示和隐藏?
selector参考:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6014.html
一、selector(背景选择器)
先看下listview中的状态:
1)在listview中配置android:listSelector="@drawable/XXX",或在listview的item中添加属性android:background="@drawable/XXX"。
2)Drawable drawable=getResources().getDrawable(R.drawable.xxx);
ListView.setSelector(drawable);但是这样有时候会出现列表为黑的情况,需加上:android:cacheColorHint="@android:color/transparent"使其透明。
相关属性:
android:state_selected是选中
android:state_focused是获得焦点
android:state_pressed是点击
android:state_enabled是设置是否响应事件,指所有事件
根据这些状态同样可以设置button的selector效果。也可设置selector改变button的文字状态。
以下是配置button中的文字效果:
android:focusable="true"
android:background="@drawable/button_color"
这样,当你使用Button的时候就可以甩掉系统自带的那黄色的背景了,实现个性化的背景。
二、listview的item同一时刻只能有一个被选中
原理:记下被选中的item是第几个,然后改变它的背景色。
实现:
第一步:适配器中传递一个参数,用来标记被选中的item是第几个。
第二步:在适配器的getView()中判断position是否与此参数相等,来判断是否需要改变背景色
第三步:第一个调用适配器的构造函数时,传递一个负数,表面没有item被选中。然后在listview的onItemClicked()事件中传递被选中的item是第几个,再notifyDataSetChanged()即可。
selector参考:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6014.html
一、selector(背景选择器)
先看下listview中的状态:
<?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 默认时的背景图片--> <item android:drawable="@drawable/pic1" /> <!-- 没有焦点时的背景图片 --> <item android:state_window_focused="false" android:drawable="@drawable/pic1" /> <!-- 非触摸模式下获得焦点并单击时的背景图片 --> <item android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/pic2" /> <!-- 触摸模式下单击时的背景图片--> <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/pic3" /> <!--选中时的图片背景--> <item android:state_selected="true" android:drawable="@drawable/pic4" /> <!--获得焦点时的图片背景--> <item android:state_focused="true" android:drawable="@drawable/pic5" /> </selector>使用方法:
1)在listview中配置android:listSelector="@drawable/XXX",或在listview的item中添加属性android:background="@drawable/XXX"。
2)Drawable drawable=getResources().getDrawable(R.drawable.xxx);
ListView.setSelector(drawable);但是这样有时候会出现列表为黑的情况,需加上:android:cacheColorHint="@android:color/transparent"使其透明。
相关属性:
android:state_selected是选中
android:state_focused是获得焦点
android:state_pressed是点击
android:state_enabled是设置是否响应事件,指所有事件
根据这些状态同样可以设置button的selector效果。也可设置selector改变button的文字状态。
以下是配置button中的文字效果:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="#FFF" /> <item android:state_focused="true" android:color="#FFF" /> <item android:state_pressed="true" android:color="#FFF" /> <item android:color="#000" /> </selector>Button还可实现更复杂的效果,如渐变:drawable/button_color.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> / <item android:state_pressed="true">//定义当button 处于pressed 状态时的形态。 <shape> <gradient android:startColor="#8600ff" /> <stroke android:width="2dp" android:color="#000000" /> <corners android:radius="5dp" /> <padding android:left="10dp" android:top="10dp" android:bottom="10dp" android:right="10dp"/> </shape> </item> <item android:state_focused="true">//定义当button获得 focus时的形态 <shape> <gradient android:startColor="#eac100"/> <stroke android:width="2dp" android:color="#333333" color="#ffffff"/> <corners android:radius="8dp" /> <padding android:left="10dp" android:top="10dp" android:bottom="10dp" android:right="10dp"/> </shape> </item> </selector>最后,在xml中的<Button />添加两项:
android:focusable="true"
android:background="@drawable/button_color"
这样,当你使用Button的时候就可以甩掉系统自带的那黄色的背景了,实现个性化的背景。
二、listview的item同一时刻只能有一个被选中
原理:记下被选中的item是第几个,然后改变它的背景色。
实现:
第一步:适配器中传递一个参数,用来标记被选中的item是第几个。
第二步:在适配器的getView()中判断position是否与此参数相等,来判断是否需要改变背景色
第三步:第一个调用适配器的构造函数时,传递一个负数,表面没有item被选中。然后在listview的onItemClicked()事件中传递被选中的item是第几个,再notifyDataSetChanged()即可。
相关文章推荐
- ListView中实现互斥按钮(每个Item中有两个button,永远只有一个item中的一个按钮被选中)
- android 选中一个Activity的ListView的item后如何传值到另一个Activity的ListView
- ListView删除选中Item一次只能删除一个
- ,避免造成混乱。 设想1:拿ListView为例,如果ListView的ItemView复用机制,所有的ItemView复用同一个,如果在多线程下载图片的情况下,可能最终只有最后一个View显示图片
- listview selector 选中时改变item 子控件 图片状态
- 利用selector shape方式改变listView或者GridView的Item选中边框(代码中设置setSelector)
- 【Android笔记】listview点击或选中item改变item样式或背景
- Android ScrollView里面嵌套ListView 显示异常(只有显示一个Item)
- (大卫的阅读笔记)More Effective C++ Item 附2:一个auto_ptr的实现实例
- VB.Net程序设计:ListView拖动自己的item放到自己另外一个item里面
- Qt学习笔记,再次分析EVA源码之后得出的结论-QListView,QListViewItem(Qt3);Q3ListView,Q3ListViewItem(Qt4)
- Android美工坊--listview更改选中时item背景色
- ListView获取选中和长按菜单对应的item的_id值
- ListView里的ItemCommand--笔记
- Android美工坊--listview更改选中时item背景色
- android中设置ListView的选中的Item的背景颜色
- Android美工坊--listview更改选中时item背景色
- 关于ListView+CheckBox,Item超过一屏时数据乱序和不能全部选中的问题
- 选中ListView中的Item后,让Item的背景高亮显示为某张图片的实现
- 添加一个Item到ListView中并及时的刷新出来。