標籤:android style blog io ar 使用 sp java for
感謝其他大神的的源碼支援
我僅在此源碼上進行修改以及注釋。
使用方法:
//設定載入分頁資料監聽
loadingListView.setOnLoadMoreListener(new OnLoadMoreListener() {
public void onLoadMore() {
if(page<3){
}else{
loadingListView.onLoadMoreComplete();//移除載入更多布局,載入完成
loadingListView.setIsEnable(false); //ture:允許開啟下滑,自動載入資料,false不允許下滑載入資料
}
}
});
整個代碼比較簡單只有一個類
import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.ProgressBar;import android.widget.RelativeLayout;import com.ferris.ferrisapp.R;public class LoadMoreListView extends ListView implements OnScrollListener {private static final String TAG = "LoadMoreListView";/** * Listener that will receive notifications every time the list scrolls. */private OnScrollListener mOnScrollListener;private LayoutInflater mInflater;private Boolean isEnable = true;public Boolean getIsEnable() {return isEnable;}public void setIsEnable(Boolean isEnable) {this.isEnable = isEnable;}// footer viewprivate RelativeLayout mFooterView;// private TextView mLabLoadMore;private ProgressBar mProgressBarLoadMore;// Listener to process load more items when user reaches the end of the listprivate OnLoadMoreListener mOnLoadMoreListener;// To know if the list is loading more itemsprivate boolean mIsLoadingMore = false;private int mCurrentScrollState;public LoadMoreListView(Context context) {super(context);init(context);}public LoadMoreListView(Context context, AttributeSet attrs) {super(context, attrs);init(context);}public LoadMoreListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init(context);}private void init(Context context) {mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); // footermFooterView = (RelativeLayout) mInflater.inflate(R.layout.load_more_footer, this, false);//載入底部view/* * mLabLoadMore = (TextView) mFooterView * .findViewById(R.id.load_more_lab_view); */mProgressBarLoadMore = (ProgressBar) mFooterView.findViewById(R.id.load_more_progressBar);addFooterView(mFooterView);super.setOnScrollListener(this);//設定滾動監聽}@Overridepublic void setAdapter(ListAdapter adapter) {super.setAdapter(adapter);}/** * Set the listener that will receive notifications every time the list * scrolls. * * @param l * The scroll listener. */@Overridepublic void setOnScrollListener(AbsListView.OnScrollListener l) {mOnScrollListener = l;}/** * Register a callback to be invoked when this list reaches the end (last * item be visible) * * @param onLoadMoreListener * The callback to run. */public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {mOnLoadMoreListener = onLoadMoreListener;}public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {if (isEnable) {//是否開啟滑動if (mOnScrollListener != null) {mOnScrollListener.onScroll(view, firstVisibleItem,visibleItemCount, totalItemCount);}if (mOnLoadMoreListener != null) {if (visibleItemCount == totalItemCount) {//剛好鋪滿一個螢幕,mProgressBarLoadMore.setVisibility(View.GONE);return;}boolean loadMore = firstVisibleItem + visibleItemCount >= totalItemCount;//滑動到底部if (!mIsLoadingMore && loadMore&& mCurrentScrollState != SCROLL_STATE_IDLE) { //判斷如果滾動到底部,並且已經停止滾動的時候,我們就顯示底部載入更多。mProgressBarLoadMore.setVisibility(View.VISIBLE);mIsLoadingMore = true; onLoadMore();//回調監聽}}}}/** * 禁止滑動 ,view重繪,否則導致閃爍 */public void onScrollStateChanged(AbsListView view, int scrollState) {// bug fix: listview was not clickable after scroll //由於我並不需要listvie item是否可以按。所以我屏蔽掉了這個,否則有可能載入圖片會閃爍不停哦。這個地方要注意。if (isEnable) {//是否開啟滑動//if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {//view.invalidateViews();//}mCurrentScrollState = scrollState;if (mOnScrollListener != null) {mOnScrollListener.onScrollStateChanged(view, scrollState);}}}public void onLoadMore() {Log.d(TAG, "onLoadMore");if (mOnLoadMoreListener != null) {mOnLoadMoreListener.onLoadMore();}}/** * Notify the loading more operation has finished */public void onLoadMoreComplete() {mIsLoadingMore = false;mProgressBarLoadMore.setVisibility(View.GONE);}/** * Interface definition for a callback to be invoked when list reaches the * last item (the user load more items in the list) */public interface OnLoadMoreListener {/** * Called when the list reaches the last item (the last item is visible * to the user) */public void onLoadMore();}}
android Listview下滑,自動載入資料.修改多處地方,去除重繪listvew,防止閃爍