一.ListView点击变色
1.selector_text.xml listview——item中textview字体颜色改变
<?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>
2.selector.xml listview——点击背景颜色改变
<?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>
3.xml中设置
<!--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"
4.代码中设置
Drawable drawable = getResources().getDrawable(R.drawable.xxx);
ListView.setSelector(drawable);
//但是这样会出现列表有时候为黑的情况,需要加上:android:cacheColorHint="@android:color/transparent"使其透明。
5.备注
android:state_selected是选中
android:state_focused是获得焦点
android:state_pressed是点击
android:state_enabled是设置是否响应事件,指所有事件
二.ListView中使用CheckBox,在翻页后CheckBox被选中乱序问题
假如ListView,分成2页(或者设置数据可以纵向拉,可隐藏),每页3条数据,每个Listview的Item 里面有个checkBox,
现在,当我选择第一页的前两天数据,翻到第二页,竟然第二页后两条数据也选中了,这是绝对不允许的。
经过本人的N次调试,发现public View getView(int position, View convertView, ViewGroup parent)传进来的convertView竟然产生多次重用。解决方案:当选中checkedBox时候,我们用一个List来保存该checkBox的position。
然后在每次产生View时取得传来的convertView赋值为null,再遍历List里保存的checkBox的位置,当在数组内时,checkBox置为选中,问题解决了。
该问题有两种解决方案,个人目前所实现了的。
1.用HashMap保存checkbox的状态值。
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()方法里面:
holder.cbox.setChecked(state.get(position)==null? false : true);
2.用List<String>保存checkbox位置
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))));
3.(不推荐使用,因为会产生许多垃圾对象)
public View getView(int position, View convertView, ViewGroup parent)在每次传进convertView时候,设为null。
然后每调用一次getView就产生一个view对象。
Android ListView或GridView中含有CheckBox时,获取选中的id
Android ListView Adapter中checkbox 勾选位置错乱
http://blog.csdn.net/fancylovejava/article/details/43227321
三.Android 侧滑删除 SwipeMenuListView
这是我的博客里面有详细介绍:http://my.oschina.net/u/2320057/blog/637111
Android 侧滑删除 SwipeMenuListView
四.ViewHolder简洁写法与替代findViewById方法
Android ViewHolder简洁写法及替代findViewById方法
五.ScrollView和ListView共同使用时,ListView全部展开
ScrollView+listView共同使用时,ListView全部展开
六.ListView没有数据时,页面处理
setEmptyView()方式:
ListView有自带setEmptyView(View view)方法,只要将没有数据时的View添加进去就可以了。
但是要注意,添加前先要做如下操作:
((ViewGroup)listView.getParent()).addView(emptyView);
七.ListView中滚动条设置
http://blog.csdn.net/ccpat/article/details/50805129
来源:oschina
链接:https://my.oschina.net/u/2320057/blog/638326