国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android使用ListView實現下拉刷新及上拉顯示更多的方法

2019-12-12 03:33:42
字體:
來源:轉載
供稿:網友

本文實例講述了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;/** * @author Stay * 動態加載listview數據,上拉 刷新,下拉 更多 */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<JSONObject> nearby_data = new ArrayList<JSONObject>();  private int lastItem;  private HashMap<String, Drawable> 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;  /** Called when the activity is first created. */  @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<JSONObject> 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<String, Drawable>();    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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹤峰县| 雅江县| 辉县市| 宜兴市| 南华县| 嫩江县| 武川县| 方山县| 苍溪县| 竹溪县| 高邑县| 洮南市| 芦山县| 肥乡县| 万全县| 莆田市| 湖南省| 平邑县| 宜城市| 福建省| 华容县| 凉山| 泸水县| 额济纳旗| 开封县| 孟村| 图片| 额济纳旗| 阜康市| 镇江市| 凯里市| 富平县| 巴马| 余姚市| 乐陵市| 钟山县| 崇义县| 漳平市| 扶沟县| 湘潭县| 安乡县|