<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 没有焦点时字体颜色 --> <item android:state_selected="false" android:color="#720606"/> <!-- 选中时的字体颜色 --> <item android:state_selected="true" android:color="#FF6666"/> <!-- 非触摸模式下得到焦点并单击时的字体颜色 --> <item android:state_focused="true" android:state_pressed="true" android:color="#720606"/> </selector> <!--或者以下--> <?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>
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/winered" android:state_pressed="true"></item> <item android:drawable="@color/themewhite" android:state_pressed="false"></item> </selector>
<!--ListView中设置--> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" android:listSelector="@drawable/selector" //主要设置这个 android:cacheColorHint="@android:color/transparent" //解决列表有时候为黑 android:scrollbars="none" /> <!--或者ListView的Item中设置背景属性--> android:background="@drawable/xxx"
Drawable drawable = getResources().getDrawable(R.drawable.xxx); ListView.setSelector(drawable); //可是这样会出现列表有时候为黑的状况,须要加上:android:cacheColorHint="@android:color/transparent"使其透明。
android:state_selected是选中java
android:state_focused是得到焦点android
android:state_pressed是点击数组
android:state_enabled是设置是否响应事件,指全部事件ide
假如ListView,分红2页(或者设置数据能够纵向拉,可隐藏),每页3条数据,每一个Listview的Item 里面有个checkBox,字体
如今,当我选择第一页的前两天数据,翻到第二页,居然第二页后两条数据也选中了,这是绝对不容许的。spa
通过本人的N次调试,发现public View getView(int position, View convertView, ViewGroup parent)传进来的convertView居然产生屡次重用。解决方案:当选中checkedBox时候,咱们用一个List来保存该checkBox的position。.net
而后在每次产生View时取得传来的convertView赋值为null,再遍历List里保存的checkBox的位置,当在数组内时,checkBox置为选中,问题解决了。调试
该问题有两种解决方案,我的目前所实现了的。code
HashMap<Integer, Boolean> state = new HashMap<Integer,Boolean>(); public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked){ state.put(position, isChecked); System.out.println("复选框以选中,选中的行数为:" + temp_position); }else{ state.remove(position); } }
在getView()方法里面:xml
holder.cbox.setChecked(state.get(position)==null? false : true);
private static List<String> selected = new ArrayList<String>(); cbSelect.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if (cbSelect.isChecked()) { selected.add(String.valueOf(fid)); } else if (!cbSelect.isChecked()) { selected.remove(String.valueOf(position)); } } });
在getView()方法里面:
cbSelect.setChecked((selected.contains(String.valueOf(position))));
public View getView(int position, View convertView, ViewGroup parent)在每次传进convertView时候,设为null。
而后每调用一次getView就产生一个view对象。
Android ListView或GridView中含有CheckBox时,获取选中的id
Android ListView Adapter中checkbox 勾选位置错乱
这是个人博客里面有详细介绍:http://my.oschina.net/u/2320057/blog/637111
Android 侧滑删除 SwipeMenuListView
Android ViewHolder简洁写法及替代findViewById方法
ScrollView+listView共同使用时,ListView所有展开
ListView有自带setEmptyView(View view)方法,只要将没有数据时的View添加进去就能够了。
可是要注意,添加前先要作以下操做:
((ViewGroup)listView.getParent()).addView(emptyView);
http://blog.csdn.net/ccpat/article/details/50805129