最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開(kāi)發(fā)中Listview動(dòng)態(tài)加載數(shù)據(jù)的方法示例

 更新時(shí)間:2017年10月20日 11:43:03   作者:guochongcan  
這篇文章主要介紹了Android開(kāi)發(fā)中Listview動(dòng)態(tài)加載數(shù)據(jù)的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android操作ListView界面布局與數(shù)據(jù)動(dòng)態(tài)更新相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Android開(kāi)發(fā)中Listview動(dòng)態(tài)加載數(shù)據(jù)的方法。分享給大家供大家參考,具體如下:

最近在研究網(wǎng)絡(luò)數(shù)據(jù)加載的問(wèn)題,比如我有幾百,甚至上千條數(shù)據(jù),這些數(shù)據(jù)如果一次性全部加載到arraylist,然后再加載到Listview中。我們必然會(huì)去單獨(dú)開(kāi)線程來(lái)做,這樣造成的結(jié)果就是會(huì)出現(xiàn)等待時(shí)間很長(zhǎng),用戶體驗(yàn)非常不好。我的想法是動(dòng)態(tài)加載數(shù)據(jù),第一次加載十條,然后往下面滑動(dòng)的時(shí)候再追加十條,再往下面滑動(dòng)的時(shí)候再去追加,這樣大大減少了用戶等待的時(shí)間,同時(shí)給處理數(shù)據(jù)留下了時(shí)間。網(wǎng)上看到了這樣一個(gè)例子,挺好的,我改動(dòng)了一下,達(dá)到了我想要的結(jié)果。

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;
  /** * 設(shè)置布局顯示屬性 */
  private LayoutParams mLayoutParams = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT,
      LinearLayout.LayoutParams.WRAP_CONTENT);
  /** * 設(shè)置布局顯示目標(biāo)最大化屬性 */
  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);
    // 設(shè)置布局 水平方向
    layout.setOrientation(LinearLayout.HORIZONTAL);
    // 進(jìn)度條
    progressBar = new ProgressBar(this);
    // 進(jìn)度條顯示位置
    progressBar.setPadding(0, 0, 15, 0);
    // 把進(jìn)度條加入到layout中
    layout.addView(progressBar, mLayoutParams);
    // 文本內(nèi)容
    TextView textView = new TextView(this);
    textView.setText("加載中...");
    textView.setGravity(Gravity.CENTER_VERTICAL);
    // 把文本加入到layout中
    layout.addView(textView, FFlayoutParams);
    // 設(shè)置layout的重力方向,即對(duì)齊方式是
    layout.setGravity(Gravity.CENTER);
    // 設(shè)置ListView的頁(yè)腳layout
    loadingLayout = new LinearLayout(this);
    loadingLayout.addView(layout, mLayoutParams);
    loadingLayout.setGravity(Gravity.CENTER);
    // 得到一個(gè)ListView用來(lái)顯示條目
    listView = (ListView) findViewById(R.id.tv);
    // 添加到腳頁(yè)顯示
    listView.addFooterView(loadingLayout);
    // 給ListView添加適配器
    listView.setAdapter(adapter);
    // 給ListView注冊(cè)滾動(dòng)監(jiān)聽(tīng)
    listView.setOnScrollListener(this);
  }
  /**
   * 要用用于生成顯示數(shù)據(jù)
   *
   * @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) {
      // 開(kāi)線程去下載網(wǎng)絡(luò)數(shù)據(jù)
      if (mThread == null || !mThread.isAlive()) {
        mThread = new Thread() {
          @Override
          public void run() {
            try {
              // 這里放你網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求的方法,我在這里用線程休眠5秒方法來(lái)處理
              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 + "頁(yè)", Toast.LENGTH_LONG).show();
        } else {
          listView.removeFooterView(loadingLayout);
        }
        // 重新刷新Listview的adapter里面數(shù)據(jù)
        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>

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android控件用法總結(jié)》、《Android開(kāi)發(fā)入門(mén)與進(jìn)階教程》、《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android數(shù)據(jù)庫(kù)操作技巧總結(jié)》及《Android資源操作技巧匯總

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Android如何禁止橫屏豎屏的變換

    Android如何禁止橫屏豎屏的變換

    android4.0 禁止橫豎屏切換使:android:configChanges="orientation|keyboardHidden|screenSize" 感興趣的朋友可以了解下哈
    2013-06-06
  • 淺析Flutter AbsorbPointer 與 IgnorePointer的區(qū)別

    淺析Flutter AbsorbPointer 與 IgnorePointer的區(qū)別

    Flutter是Google一個(gè)新的用于構(gòu)建跨平臺(tái)的手機(jī)App的SDK。這篇文章主要介紹了Flutter AbsorbPointer 與 IgnorePointer的區(qū)別,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Android從源碼的角度徹底理解事件分發(fā)機(jī)制的解析(上)

    Android從源碼的角度徹底理解事件分發(fā)機(jī)制的解析(上)

    這篇文章主要介紹了Android從源碼的角度徹底理解事件分發(fā)機(jī)制的解析,具有很好的參考價(jià)值,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Android Handler之消息循環(huán)的深入解析

    Android Handler之消息循環(huán)的深入解析

    本篇文章是對(duì)Handler消息循環(huán)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Android activity堆棧及管理實(shí)例詳解

    Android activity堆棧及管理實(shí)例詳解

    這篇文章主要介紹了Android activity堆棧及管理實(shí)例詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,對(duì)android activity堆棧相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-09-09
  • Android分享微信小程序失敗的一些事小結(jié)

    Android分享微信小程序失敗的一些事小結(jié)

    這篇文章主要給大家介紹了關(guān)于Android分享微信小程序失敗一些事,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Android自定義仿ios加載彈窗

    Android自定義仿ios加載彈窗

    這篇文章主要為大家詳細(xì)介紹了Android自定義仿ios加載彈窗,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Android 加密解密字符串詳解

    Android 加密解密字符串詳解

    本篇文章是對(duì)Android的加密解密字符串進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Android String類型轉(zhuǎn)換為float、double和int的工具類方法

    Android String類型轉(zhuǎn)換為float、double和int的工具類方法

    今天小編就為大家分享一篇Android String類型轉(zhuǎn)換為float、double和int的工具類方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Android中webView加載H5綁定cookie實(shí)例

    Android中webView加載H5綁定cookie實(shí)例

    這篇文章主要介紹了Android中webView加載H5綁定cookie實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03

最新評(píng)論

临沧市| 循化| 化隆| 乐昌市| 子洲县| 离岛区| 家居| 盐池县| 晋州市| 镇宁| 喀什市| 洛扎县| 清远市| 永修县| 平陆县| 旬邑县| 双柏县| 聊城市| 景宁| 南澳县| 巨鹿县| 色达县| 栖霞市| 玛曲县| 榕江县| 广丰县| 九台市| 崇州市| 威宁| 商河县| 广平县| 夹江县| 扎兰屯市| 陆良县| 乌拉特中旗| 突泉县| 南丹县| 东丽区| 绥芬河市| 罗甸县| 科尔|