欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

14、自定义ListView

程序员文章站 2022-03-11 11:37:16
...
        实现了显示的效果,接着来实现一些监听器(接口),下拉刷新、上拉加载、Item划出屏幕(之后会用到)等监听器(接口),定义两个接口:
public interface QRecyclerListener{
	void onMovedToScrapHeap(View view);//Item划出屏幕回调函数
}
public void setQRecyclerListener(QRecyclerListener listener){//设置
	this.rclistener=listener;
}
	
public interface QPullListener{
	void onRefresh();//下拉刷新回调函数
	void onLoad();//上拉加载回调函数
}
public void setQPullListener(QPullListener listener){//设置
	this.pulllistener=listener;
}

        只需在需要的地方调用pulllistener.onRefresh();(或其他),如上节触摸事件中调用下拉刷新。
        上拉加载则是当页面滑动时,判断是否快要到达页面结束,并调用pulllistener.onLoad();,为此CListView需要实现OnScrollListener接口,并实现其方法。

        实现OnScrollListener接口

private class CListView extends ListView implements OnScrollListener


        实现两个方法
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
	// TODO Auto-generated method stub
	if(firstVisibleItem+visibleItemCount>=totalItemCount&&!isLoad&&pulllistener!=null){
		pulllistener.onLoad();
		isLoad=true;//是否正在加载的一个标志
	}
}
		
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
	// TODO Auto-generated method stub
	
}

        Item划出屏幕的接口,实现RecyclerListener接口
private class CListView extends ListView implements OnScrollListener, RecyclerListener

        实现一个方法
@Override
public void onMovedToScrapHeap(View view) {
	// TODO Auto-generated method stub
	if(rclistener!=null&&getFirstVisiblePosition()>1){
		rclistener.onMovedToScrapHeap(view);
	}
}


        添加刷新完成、加载完成,恢复初始状态的函数
public void completeRefresh(int state){
	iv_refresh.clearAnimation();//停止动画
	rl_refresh.setPadding(0, -iv_refresh.getHeight(), 0, 0);
	clv_list.isRefresh=false;
}
public void completeLoad(int state){
	clv_list.isLoad=false;
}

        附上变量定义及动画Xml
private ImageView iv_refresh;//刷新提示图标
private RelativeLayout rl_refresh;//图标父布局,通过改变Padding改变图标位置
private Animation anim_rotate;//刷新时的旋转动画
	
private CListView clv_list;//内部定义CListView继承自ListView
private QRecyclerListener rclistener;//内部Item划出屏幕监听器
private QPullListener pulllistener;//刷新加载监听器

        旋转动画
        res/anim下新建动画文件anim_rotate_round.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    	android:fromDegrees="0"
    	android:toDegrees="720"
    	android:duration="1080"
    	android:repeatCount="-1"
    	android:pivotX="50%"  
    	android:pivotY="50%" >
</rotate>


        测试效果ListFragment中
private void initListener(){
	adapter=new ListAdapter(getActivity(),qlv_list);
	qlv_list.setAdapter(adapter);
		
	qlv_list.setQPullListener(qplistener);
}

private QPullListener qplistener=new QPullListener() {
	
	@Override
	public void onRefresh() {
		// TODO Auto-generated method stub
		qlv_list.completeRefresh(0);
		System.out.println("刷新");
	}
		
	@Override
	public void onLoad() {
		// TODO Auto-generated method stub
		qlv_list.completeLoad(0);
		System.out.println("加载");
	};
}

14、自定义ListView
            
    
    博客分类: Code/Android/Dp Notes 安卓学习总结安卓开发安卓实例Dp Notes 
注:懒了,好多图都用的一个,看输出信息是否有相应文字

始终相信——2017/05/16



  • 14、自定义ListView
            
    
    博客分类: Code/Android/Dp Notes 安卓学习总结安卓开发安卓实例Dp Notes 
  • 大小: 1.8 MB