@wangwangheng
2014-11-24T02:39:45.000000Z
字数 4225
阅读 2316
ListView
目录
package com.culiu.purchase.app.view;import android.content.Context;import android.util.AttributeSet;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import com.culiu.core.pulltorefresh.library.PullToRefreshListView;/*** 具有倒数第N个Item可见的时候的监听的下拉刷新控件,注意千万别给mRefreshView设置滚动监听,否则这个类就废了** @author wangheng**/public class CountdownPullToRefreshListView extends PullToRefreshListView {/** 上一个可见的Item的索引 **/private int mPreviousItem = 0;/** 监听器,你懂得 **/private OnCountdownItemVisibleListener mCountdownListener = null;public CountdownPullToRefreshListView(Context context, AttributeSet attrs) {super(context, attrs);init(context);}public CountdownPullToRefreshListView(Context context,com.culiu.core.pulltorefresh.library.PullToRefreshBase.Mode mode,com.culiu.core.pulltorefresh.library.PullToRefreshBase.AnimationStyle style) {super(context, mode, style);init(context);}public CountdownPullToRefreshListView(Context context,com.culiu.core.pulltorefresh.library.PullToRefreshBase.Mode mode) {super(context, mode);init(context);}public CountdownPullToRefreshListView(Context context) {super(context);init(context);}/*** 初始化View** @param context*/private void init(Context context) {mRefreshableView.setOnScrollListener(new InternalOnScrollListener());}/**** @author wangheng**/private class InternalOnScrollListener implements OnScrollListener {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {// 回调父类的方法CountdownPullToRefreshListView.this.onScrollStateChanged(view,scrollState);}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {// 回调父类的方法CountdownPullToRefreshListView.this.onScroll(view,firstVisibleItem, visibleItemCount, totalItemCount);int lastItem = firstVisibleItem + visibleItemCount;if (mCountdownListener != null) {int countdown = mCountdownListener.getCountdownNumber();// 为什么是大于而不是大于等于?这里取满足条件的的一个临界点,假如有20个Item,倒数第4个的时候调用onVisible,则这个时机在第15个跳转到第16个的一瞬间进行加载if (lastItem > mPreviousItem && lastItem == totalItemCount - countdown) {mCountdownListener.onVisible();}}mPreviousItem = lastItem;}}/*** 设置倒数第N个元素可见的时候的监听器** @param listener*/public void setOnCountdownItemVisibleListener(OnCountdownItemVisibleListener listener) {this.mCountdownListener = listener;}/*** 倒数第几个Item可见的时候刷新舰艇 注意,只有在ListView往上拉的时候,回调方法才会调用** @author wangheng**/public interface OnCountdownItemVisibleListener {/*** 倒数第几个Item的时候刷新数据** @return 实现这个接口的对象需要给定倒数第几个数据开始刷新*/int getCountdownNumber();/*** 第getCountdownNumber()个Item可见的时候的回调,特别注意这个方法会调用多次,自己要在这个方法中做是否正在刷新的判断*/void onVisible();}}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:culiu="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><!-- <com.culiu.core.pulltorefresh.library.PullToRefreshListView --><com.culiu.purchase.app.view.CountdownPullToRefreshListViewandroid:id="@+id/home99ListView"android:layout_width="match_parent"android:layout_height="match_parent"android:listSelector="@color/transparent"android:cacheColorHint="@color/transparent"android:divider="@color/transparent"android:dividerHeight="1px"android:fastScrollEnabled="false"android:scrollbarStyle="outsideOverlay"android:fadingEdge="none"culiu:ptrMode="pullFromStart"culiu:ptrAnimationStyle="flip"culiu:ptrHeaderTextColor="@color/ptr_header_text_color"android:layout_marginTop="-1dip"/></LinearLayout>
/** ListView **/private CountdownPullToRefreshListView mRefreshView = null;@Overrideprotected View onCreateViewExecute(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_home99, container, false);mViewFinder = new ViewFinder(view);mRefreshView = mViewFinder.find(R.id.home99ListView);// 为什么实现OnRefreshListener2而不是OnRefreshListener?为了扩展的需要mRefreshView.setOnRefreshListener(Home99Fragment.this);mRefreshView.setOnCountdownItemVisibleListener(Home99Fragment.this);return view;}@Overridepublic int getCountdownNumber() {// 倒数第四个元素执行刷新操作return 4;}@Overridepublic void onVisible() {DebugLog.e("xinye","==============执行了================");}