android Listview下滑,自動載入資料.修改多處地方,去除重繪listvew,防止閃爍

來源:互聯網
上載者:User

標籤: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,防止閃爍

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.