package com.wenba.bangbang.views; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.ExpandableListView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import com.wenba.bangbang.R; import com.wenba.comm.BBLog; public class LoadMoreExpandableListView extends ExpandableListView implements OnScrollListener {  private static final int PRE_LOAD_OFFSET = 2;// 拉到距离底部多少条的时候加载下一页  private static final String TAG = "LoadMoreExpandableListView";  private LayoutInflater mInflater;  private LinearLayout mLoadMoreView;  private ProgressBar mLoadMoreProgress;  private TextView mLoadMoreText;  private OnLoadMoreListener onLoadMoreListener;  private OnScrollListener mOnScrollListener;  private int lastTimeFirstVisibleItem = 0;  private boolean bIsLoadingMore = false;  private boolean bIsAllLoaded = false;  private int mCurrentScrollState;  /**   * @param context   * @param attrs   */  public LoadMoreExpandableListView(Context context, AttributeSet attrs) {  super(context, attrs);  init(context);  }  private void init(Context context) {  mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  mLoadMoreView = (LinearLayout) mInflater.inflate(R.layout.pull_to_load_footer, this, false);  mLoadMoreProgress = (ProgressBar) mLoadMoreView.findViewById(R.id.skin_pull_to_load_progress);  mLoadMoreText = (TextView) mLoadMoreView.findViewById(R.id.skin_pull_to_load_text);  addFooterView(mLoadMoreView);  measureView(mLoadMoreView);  mLoadMoreView.setOnClickListener(null);  super.setOnScrollListener(this);  }  private void measureView(View child) {  ViewGroup.LayoutParams p = child.getLayoutParams();  if (p == null) {  p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);  }  int childWidthSpec = ViewGroup.getChildMeasureSpec(0, 0 + 0, p.width);  int lpHeight = p.height;  int childHeightSpec;  if (lpHeight > 0) {  childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);  } else {  childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);  }  child.measure(childWidthSpec, childHeightSpec);  }  private void onLoadMore() {  BBLog.d(TAG, "onLoadMore");  if (onLoadMoreListener != null) {  onLoadMoreListener.onLoadMore();  mLoadMoreView.setVisibility(View.VISIBLE);  mLoadMoreProgress.setVisibility(View.VISIBLE);  mLoadMoreText.setText("正在加载...");  }  }  public void onLoadMoreComplete() {  BBLog.d(TAG, "onLoadMoreComplete");  bIsLoadingMore = false;  mLoadMoreView.setVisibility(View.GONE);  // mLoadMoreProgress.setVisibility(View.GONE);  // mLoadMoreText.setText("加载完成");  }  public void onLoadFail() {  BBLog.d(TAG, "loadFail");  bIsLoadingMore = false;  mLoadMoreView.setVisibility(View.GONE);  // mLoadMoreProgress.setVisibility(View.GONE);  // mLoadMoreText.setText("加载失败");  }  public void onAllLoaded() {  BBLog.d(TAG, "onAllLoaded");  bIsLoadingMore = false;  bIsAllLoaded = true;  mLoadMoreView.setVisibility(View.VISIBLE);  mLoadMoreProgress.setVisibility(View.GONE);  mLoadMoreText.setVisibility(View.VISIBLE);  // mLoadMoreText.setText("没有更多了");  }  public void setLoadMoreTextColor(int color) {  if (mLoadMoreText != null) {  mLoadMoreText.setTextColor(color);  }  }  public void setLoadMoreProgressDrawable(Drawable drawable) {  if (mLoadMoreProgress != null) {  mLoadMoreProgress.setIndeterminateDrawable(drawable);  }  }  /**   * @return the onLoadMoreListener   */  public OnLoadMoreListener getOnLoadMoreListener() {  return onLoadMoreListener;  }  /**   * @param onLoadMoreListener   *            the onLoadMoreListener to set   */  public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {  this.onLoadMoreListener = onLoadMoreListener;  }  /**   * @return the bHasMore   */  public boolean isAllLoaded() {  return bIsAllLoaded;  }  /**   * @param bHasMore   *            the bHasMore to set   */  public void setIsAllLoaded(boolean isAllLoaded) {  this.bIsAllLoaded = isAllLoaded;  }  @Override  public void setOnScrollListener(AbsListView.OnScrollListener l) {  mOnScrollListener = l;  }  @Override  public void onScrollStateChanged(AbsListView view, int scrollState) {  // TODO Auto-generated method stub  mCurrentScrollState = scrollState;  if (mOnScrollListener != null) {  mOnScrollListener.onScrollStateChanged(view, scrollState);  }  }  @Override  public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {  if (firstVisibleItem > lastTimeFirstVisibleItem) {  if (!bIsLoadingMore && !bIsAllLoaded && (firstVisibleItem + visibleItemCount >= totalItemCount - PRE_LOAD_OFFSET)  && mCurrentScrollState != SCROLL_STATE_IDLE) {  bIsLoadingMore = true;  BBLog.d(TAG, "loadmore");  onLoadMore();  }  if (bIsAllLoaded && (firstVisibleItem + visibleItemCount >= totalItemCount - PRE_LOAD_OFFSET) && mCurrentScrollState != SCROLL_STATE_IDLE) {  onAllLoaded();  }  }  lastTimeFirstVisibleItem = firstVisibleItem;  if (mOnScrollListener != null) {  mOnScrollListener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);  }  }  public interface OnLoadMoreListener {  public void onLoadMore();  } } public void onResponse(BBObject response) { if (response != null) { if (response.isSuccess()) { PurchaseRecordListBean purchaseRecordListBean = (PurchaseRecordListBean) response; List purchaseRecordList = null; if (purchaseRecordListBean != null) { purchaseRecordList = purchaseRecordListBean.getList(); } if (curPage == 1) { mPurchaseRecordListView.setIsAllLoaded(false); if (purchaseRecordList != null && purchaseRecordList.size() > 0) { lists.clear(); lists.addAll(purchaseRecordList); mPurchaseRecordListView.setVisibility(View.VISIBLE); noRecordLayout.setVisibility(View.GONE); mPurchaseRecordAdapter.setDataList(lists); if (mPurchaseRecordListView.getAdapter() == null) { mPurchaseRecordListView.setAdapter(mPurchaseRecordAdapter); for (int i = 0; i < mPurchaseRecordAdapter.getGroupCount(); i++) { mPurchaseRecordListView.expandGroup(i); } } else { mPurchaseRecordAdapter.notifyDataSetChanged(); } mPurchaseRecordListView.setSelection(0); curPage++; } else { lists.clear(); noRecordLayout.setVisibility(View.VISIBLE); mPurchaseRecordListView.setVisibility(View.GONE); } } else { if (purchaseRecordList != null && purchaseRecordList.size() >= 0) { lists.addAll(purchaseRecordList); mPurchaseRecordListView.setIsAllLoaded(false); mPurchaseRecordListView.onLoadMoreComplete(); mPurchaseRecordAdapter.setDataList(lists); curPage++; if (purchaseRecordList.size() < PAGE_SIZE_LIMIT) { mPurchaseRecordListView.onAllLoaded(); } } else { mPurchaseRecordListView.onAllLoaded(); } } } else { APPUtil.showToast(getApplicationContext(), response.getMsg()); } } }

更多相关文章

  1. android ViewPager onPageChangeListener
  2. Android几种强大的下拉刷新库
  3. Fragment保存数据
  4. xml中自定义图形
  5. OpenCV4.4在安卓中的配置
  6. 纸上得来终觉浅,绝知此事要躬行。Broadcast和Fragment详解
  7. uniapp自定义弹窗组件|Modal模态框|Loading加载框
  8. Android(安卓)WebView使用
  9. Android(安卓)Loader 机制浅谈

随机推荐

  1. android host修改
  2. Android(安卓)Studio常用插件
  3. TabHost
  4. Android获取物理地址(支持5.0~10.0)
  5. Android(安卓)流媒体系列(二)
  6. Android透明字体画法
  7. android 探索首选项框架 ListPreference
  8. Android实现打电话功能
  9. android实现涂鸦,保存涂鸦后的图片,清屏
  10. Install Android(安卓)Composite ADB Int