Android ListView 使用

情到浓时终转凉″ 提交于 2019-12-03 12:56:50

一.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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!