栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android使用ListView实现下拉刷新及上拉显示更多的方法

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android使用ListView实现下拉刷新及上拉显示更多的方法

本文实例讲述了Android使用ListView实现下拉刷新及上拉显示更多的方法。分享给大家供大家参考,具体如下:

今天得需求是做listview+上下拉动在header和footer显示progressdialog,但不影响用户操作

直接上代码,我已经加上注释了,自己看。

package com.stay.main;
import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.stay.wifi.R;

public class ListViewActivity extends Activity implements onScrollListener {
  private static final int LOAD = 0;
  private static final int ERROR = 0;
  private static final int MEMBER = 1;
  private static final int LOADED = 2;
  private static final int DIALOG = 3;
  private static final int FULL = 4;
  private NearbyAdapter adapter;
  private ListView nearby_lv;
  private RelativeLayout nearby_lv_header;
  private Button list_bottom_btn;
  private LinearLayout list_bottom_linear;
  private TextView bottom_progress_text;
  private RelativeLayout nearby_lv_footer;
  private Button list_header_btn;
  private LinearLayout list_header_linear;
  private TextView heard_progress_text;
  private ArrayList nearby_data = new ArrayList();
  private int lastItem;
  private HashMap imageCache;
  private com.stay.main.ListViewActivity.MyHandler myHandler;
  private ProgressDialog dialog;
  private int curPage = 1;
  private boolean isMember = false;
  private int firstItem;
  public int count;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    initView();
    myHandler.sendEmptyMessage(LOAD);
  }
  @Override
  public void onScrollStateChanged(AbsListView view, int scrollState) {
    DebugUtil.debug("onScrollStateChanged");
    //当滚动停止且滚动的总数等于数据的总数,去加载
    if (lastItem == count && scrollState == SCROLL_STATE_IDLE) {
      DebugUtil.debug("onScrollStateChanged--------next");
      if (curPage == 4 && !isMember) {
 DebugUtil.show(this, "您不是正式会员,请申请正式会员,");
 list_bottom_linear.setVisibility(View.GONE);
      } else {
 //加载数据
 myHandler.sendEmptyMessage(LOAD);
      }
      return;
    }
    //当往上拉时更新数据,将data清空然后去重新加载
    if (firstItem == 0 && scrollState == SCROLL_STATE_IDLE) {
      DebugUtil.debug("onScrollStateChanged--------refresh");
      curPage = 0;
      myHandler.sendEmptyMessage(LOAD);
    }
  }
  @Override
  public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    DebugUtil.debug("firstVisibleItem=" + firstVisibleItem);
    DebugUtil.debug("visibleItemCount=" + visibleItemCount);
    DebugUtil.debug("totalItemCount=" + totalItemCount);
    //这里要减二,因为我加了header footer
    lastItem = firstVisibleItem + visibleItemCount - 2;
    firstItem = firstVisibleItem;
  }
  public int getData() {
    try {
      HttpURLConnection conn = DownloadUtil.download(url//自己写咯);
      ArrayList temp = JSONUtil.streamToJsonList(conn.getInputStream());
      if (curPage == 0 && nearby_data.size() > 0) {
 nearby_data.clear();
 count = 0;
      }
      if (temp != null && temp.size() > 0) {
 count += temp.size();
 nearby_data.addAll(temp);
 DebugUtil.debug("nearby_data.size()="+nearby_data.size());
      } else {
 return FULL;
      }
      return LOADED;
    } catch (Exception e) {
      return ERROR;
    }
  }
  private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      super.handleMessage(msg);
      switch (msg.what) {
      case DIALOG:
 list_bottom_linear.setVisibility(View.VISIBLE);
 list_header_linear.setVisibility(View.VISIBLE);
 break;
      case LOADED:
 list_bottom_linear.setVisibility(View.GONE);
 list_header_linear.setVisibility(View.GONE);
 curPage++;
 adapter.notifyDataSetChanged();
 break;
      case ERROR:
 DebugUtil.debug("error,missing data");
 break;
      case MEMBER:
 DebugUtil.debug("you must regist formal member");
 break;
      default:
 break;
      }
    }
  };
//创建子线程加载数据,然后更新
  private class MyHandler extends Handler {
    private int status;
    public MyHandler(Looper looper) {
      super(looper);
    }
    @Override
    public void handleMessage(Message msg) {
      synchronized (this) {
 switch (msg.what) {
 case LOAD:// get data from server
   handler.sendEmptyMessage(DIALOG);//显示等待框
   status = getData();
   handler.sendEmptyMessageDelayed(status, 1000);
   break;
 default:
   break;
 }
      }
    }
  }
  public void initView() {
    imageCache = new HashMap();
    HandlerThread handlerThread = new HandlerThread("nearby");
    // 在使用HandlerThread的getLooper()方法之前,必须先调用该类的start();
    handlerThread.start();
    myHandler = new MyHandler(handlerThread.getLooper());
    nearby_lv = (ListView) findViewById(R.id.nearby_lv);
    nearby_lv_footer = (RelativeLayout) LayoutInflater.from(ListViewActivity.this).inflate(R.layout.nearby_lv_header, null);
    list_bottom_btn = (Button) nearby_lv_footer.findViewById(R.id.list_bottom_btn);
    list_bottom_linear = (LinearLayout) nearby_lv_footer.findViewById(R.id.list_bottom_linear);
    bottom_progress_text = (TextView) nearby_lv_footer.findViewById(R.id.progress_text);
    nearby_lv_header = (RelativeLayout) LayoutInflater.from(ListViewActivity.this).inflate(R.layout.nearby_lv_header, null);
    list_header_btn = (Button) nearby_lv_header.findViewById(R.id.list_bottom_btn);
    list_header_linear = (LinearLayout) nearby_lv_header.findViewById(R.id.list_bottom_linear);
    heard_progress_text = (TextView) nearby_lv_header.findViewById(R.id.progress_text);
    list_header_btn.setText("刷新");
    list_bottom_btn.setText("更多");
    list_header_linear.setVisibility(View.GONE);
    nearby_lv.addHeaderView(nearby_lv_header);
    nearby_lv.addFooterView(nearby_lv_footer);
    // list_header_btn.setonClickListener(header_click);
    adapter = new NearbyAdapter(ListViewActivity.this, nearby_data);
    nearby_lv.setAdapter(adapter);
    nearby_lv.setonScrollListener(ListViewActivity.this);
  }
}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android Service组件使用技巧总结》、《Android编程之activity操作技巧总结》、《Android资源操作技巧汇总》、《Android操作json格式数据技巧总结》、《Android开发入门与进阶教程》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/159596.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号