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

首頁 > 系統 > Android > 正文

Android開發中Listview動態加載數據的方法示例

2019-10-22 18:25:23
字體:
來源:轉載
供稿:網友

本文實例講述了Android開發中Listview動態加載數據的方法。分享給大家供大家參考,具體如下:

最近在研究網絡數據加載的問題,比如我有幾百,甚至上千條數據,這些數據如果一次性全部加載到arraylist,然后再加載到Listview中。我們必然會去單獨開線程來做,這樣造成的結果就是會出現等待時間很長,用戶體驗非常不好。我的想法是動態加載數據,第一次加載十條,然后往下面滑動的時候再追加十條,再往下面滑動的時候再去追加,這樣大大減少了用戶等待的時間,同時給處理數據留下了時間。網上看到了這樣一個例子,挺好的,我改動了一下,達到了我想要的結果。

Java代碼:

package org.developerworks.android;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseAdapter;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;import android.widget.AbsListView.OnScrollListener;import android.widget.LinearLayout.LayoutParams;public class ListViewForLoading extends Activity implements OnScrollListener {  private listViewAdapter adapter = new listViewAdapter();  ListView listView;  LinearLayout loadingLayout;  private Thread mThread;  /** * 設置布局顯示屬性 */  private LayoutParams mLayoutParams = new LinearLayout.LayoutParams(      LinearLayout.LayoutParams.WRAP_CONTENT,      LinearLayout.LayoutParams.WRAP_CONTENT);  /** * 設置布局顯示目標最大化屬性 */  private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams(      LinearLayout.LayoutParams.FILL_PARENT,      LinearLayout.LayoutParams.FILL_PARENT);  private ProgressBar progressBar;  /** Called when the activity is first created. */  @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main);    init();  }  private void init() {    // TODO Auto-generated method stub    // 線性布局    LinearLayout layout = new LinearLayout(this);    // 設置布局 水平方向    layout.setOrientation(LinearLayout.HORIZONTAL);    // 進度條    progressBar = new ProgressBar(this);    // 進度條顯示位置    progressBar.setPadding(0, 0, 15, 0);    // 把進度條加入到layout中    layout.addView(progressBar, mLayoutParams);    // 文本內容    TextView textView = new TextView(this);    textView.setText("加載中...");    textView.setGravity(Gravity.CENTER_VERTICAL);    // 把文本加入到layout中    layout.addView(textView, FFlayoutParams);    // 設置layout的重力方向,即對齊方式是    layout.setGravity(Gravity.CENTER);    // 設置ListView的頁腳layout    loadingLayout = new LinearLayout(this);    loadingLayout.addView(layout, mLayoutParams);    loadingLayout.setGravity(Gravity.CENTER);    // 得到一個ListView用來顯示條目    listView = (ListView) findViewById(R.id.tv);    // 添加到腳頁顯示    listView.addFooterView(loadingLayout);    // 給ListView添加適配器    listView.setAdapter(adapter);    // 給ListView注冊滾動監聽    listView.setOnScrollListener(this);  }  /**   * 要用用于生成顯示數據   *   * @author huangbq   */  class listViewAdapter extends BaseAdapter {    int count = 10;    public int getCount() {      return count;    }    public Object getItem(int pos) {      return pos;    }    public long getItemId(int pos) {      return pos;    }    public View getView(int pos, View v, ViewGroup p) {      TextView view;      if (v == null) {        view = new TextView(ListViewForLoading.this);      } else {        view = (TextView) v;      }      view.setText("ListItem " + pos);      view.setTextSize(20f);      view.setGravity(Gravity.CENTER);      view.setHeight(60);      return view;    }  }  @Override  public void onScroll(AbsListView view, int firstVisibleItem,      int visibleItemCount, int totalItemCount) {    // TODO Auto-generated method stub    if (firstVisibleItem + visibleItemCount == totalItemCount) {      // 開線程去下載網絡數據      if (mThread == null || !mThread.isAlive()) {        mThread = new Thread() {          @Override          public void run() {            try {              // 這里放你網絡數據請求的方法,我在這里用線程休眠5秒方法來處理              Thread.sleep(5000);            } catch (InterruptedException e) {              e.printStackTrace();            }            Message message = new Message();            message.what = 1;            handler.sendMessage(message);          }        };        mThread.start();      }    }  }  @Override  public void onScrollStateChanged(AbsListView view, int scrollState) {    // TODO Auto-generated method stub  }  private Handler handler = new Handler() {    @Override    public void handleMessage(Message msg) {      // TODO Auto-generated method stub      switch (msg.what) {      case 1:        if (adapter.count <= 41) {          adapter.count += 10;          int currentPage = adapter.count / 10;          Toast.makeText(getApplicationContext(),              "第" + currentPage + "頁", Toast.LENGTH_LONG).show();        } else {          listView.removeFooterView(loadingLayout);        }        // 重新刷新Listview的adapter里面數據        adapter.notifyDataSetChanged();        break;      default:        break;      }    }  };}

main.xml別忘了加這段了

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="wrap_content"  android:layout_height="wrap_content">  <ListView android:id="@+id/tv"    android:layout_width="wrap_content"    android:layout_height="wrap_content"/></LinearLayout>

希望本文所述對大家Android程序設計有所幫助。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河曲县| 周至县| 阜宁县| 玛纳斯县| 桐城市| 中方县| 正定县| 衡阳市| 确山县| 西贡区| 普洱| 军事| 吴江市| 遂川县| 沙湾县| 营山县| 易门县| 仪征市| 新源县| 富平县| 汝州市| 潢川县| 浦江县| 武安市| 遵义县| 工布江达县| 梁山县| 庄浪县| 明水县| 天门市| 乌兰县| 湖南省| 米易县| 青铜峡市| 巴彦淖尔市| 贡嘎县| 南澳县| 南京市| 越西县| 靖安县| 光山县|