成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ListView動態加載數據模板

移動開發 Android
ListView 控件可使用四種不同視圖顯示項目。通過此控件,可將項目組成帶有或不帶有列標頭的列,并顯示伴隨的圖標和文本。本文是使用xml布局來實現的。

對于做Android應用程序來說,ListView一定用得非常多,經常解析xml文件然后在ListView中顯示,往往我們需要讓它動態地加載內容,也就是不一次性地加載完成,對于手機來說,這點很重要!筆者之前也是弄的不明白,用的時候直接在網上找代碼,復制粘貼,再修改一下就是自己的了,筆者的這個小Demo靈感來自于新浪或者騰訊微博手機客戶端,比如***頁加載十條Item,當翻到***一個Item的時候,會出來一個Button,當點擊Button的時候就會繼續加載更多的,當然如果不點,就不會加載的,節約用戶流量,先看效果圖

 

 

如果覺得滿意的話就繼續看下面的代碼吧,筆者這里沒有用到main.xml文件,全部在java文件中定義的,如果理解了的話自己可以在xml文件里面寫布局

  1. package com.focus.loading;  
  2. import android.app.ListActivity;  
  3. import android.os.Bundle;  
  4. import android.os.Handler;  
  5. import android.view.Gravity;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.view.ViewGroup;  
  9. import android.view.ViewGroup.LayoutParams;  
  10. import android.widget.AbsListView;  
  11. import android.widget.AbsListView.OnScrollListener;  
  12. import android.widget.BaseAdapter;  
  13. import android.widget.Button;  
  14. import android.widget.LinearLayout;  
  15. import android.widget.ListView;  
  16. import android.widget.ProgressBar;  
  17. import android.widget.TextView;  
  18. public class ListViewActivity extends ListActivity implements OnScrollListener {  
  19.     private LinearLayout mLoadLayout;  
  20.     private LinearLayout mProgressLoadLayout;  
  21.     private ListView mListView;  
  22.     private ListViewAdapter mListViewAdapter = new ListViewAdapter();  
  23.     private int mLastItem = 0;  
  24.     private int mCount = 41;  
  25.     private final Handler mHandler = new Handler();// 在Handler中加載數據  
  26.     private final LayoutParams mLayoutParams = new LinearLayout.LayoutParams(  
  27.             LinearLayout.LayoutParams.WRAP_CONTENT,  
  28. LinearLayout.LayoutParams.WRAP_CONTENT);  
  29.     int scrollState;// 全局變量,用來記錄ScrollView的滾動狀態,1表示開始滾動,2表示正在滾動,0表示滾動停止  
  30.     int visibleItemCount;// 當前可見頁面中的Item總數  
  31.     @Override  
  32.     public void onCreate(Bundle savedInstanceState) {  
  33.         super.onCreate(savedInstanceState);  
  34.         /**  
  35.          * "加載項"布局,此布局被添加到ListView的Footer中。  
  36.          */  
  37.         mLoadLayout = new LinearLayout(this);  
  38.         mLoadLayout.setMinimumHeight(30);  
  39.         mLoadLayout.setGravity(Gravity.CENTER);  
  40.         mLoadLayout.setOrientation(LinearLayout.VERTICAL);  
  41.         /*  
  42.          * 當點擊按鈕的時候顯示這個View,此View使用水平方式布局,左邊是一個進度條,右邊是文本,默認設為不可見  
  43.          */  
  44.         mProgressLoadLayout = new LinearLayout(this);  
  45.         mProgressLoadLayout.setMinimumHeight(30);  
  46.         mProgressLoadLayout.setGravity(Gravity.CENTER);  
  47.         mProgressLoadLayout.setOrientation(LinearLayout.HORIZONTAL);  
  48.  
  49.         ProgressBar mProgressBar = new ProgressBar(this);  
  50.         mProgressBar.setPadding(0, 0, 15, 0);  
  51.         mProgressLoadLayout.addView(mProgressBar, mLayoutParams);// 為布局添加進度條  
  52.  
  53.         TextView mTipContent = new TextView(this);  
  54.         mTipContent.setText("加載中...");  
  55.         mProgressLoadLayout.addView(mTipContent, mLayoutParams);// 為布局添加文本  
  56.         mProgressLoadLayout.setVisibility(View.GONE);// 默認設為不可見,注意View.GONE和View.INVISIBLE的區別  
  57.  
  58.         mLoadLayout.addView(mProgressLoadLayout);// 把之前的布局以View對象添加進來  
  59.         final Button button = new Button(this);  
  60.         button.setText("加載更多");  
  61.         // 添加按鈕  
  62.         mLoadLayout.addView(button, new LayoutParams(LayoutParams.FILL_PARENT,  
  63.                 LayoutParams.WRAP_CONTENT));  
  64.         button.setOnClickListener(new OnClickListener() {  
  65.             @Override  
  66.             public void onClick(View v) {  
  67.                 if (mLastItem == mListViewAdapter.count  
  68.                         && scrollState == OnScrollListener.SCROLL_STATE_IDLE) {  
  69.                     // 當點擊時把帶進度條的Layout設為可見,把Button設為不可見  
  70.                     mProgressLoadLayout.setVisibility(View.VISIBLE);  
  71.                     button.setVisibility(View.GONE);  
  72.                     if (mListViewAdapter.count <= mCount) {  
  73.                         mHandler.postDelayed(new Runnable() {  
  74.                             @Override  
  75.                             public void run() {  
  76.                                 mListViewAdapter.count += 10;  
  77.                                 mListViewAdapter.notifyDataSetChanged();  
  78.                                 mListView.setSelection(mLastItem  
  79.                                         - visibleItemCount + 1);  
  80.                                 // 獲取數據成功時把Layout設為不可見,把Button設為可見  
  81.                                 mProgressLoadLayout.setVisibility(View.GONE);  
  82.                                 button.setVisibility(View.VISIBLE);  
  83.                             }  
  84.                         }, 2000);  
  85.                     }  
  86.                 }  
  87.             }  
  88.         });  
  89.  
  90.         mListView = getListView();  
  91.         mListView.addFooterView(mLoadLayout);  
  92.         setListAdapter(mListViewAdapter);  
  93.         mListView.setOnScrollListener(this);  
  94.     }  
  95.     @Override  
  96.     public void onScroll(AbsListView view, int firstVisibleItem,  
  97.             int visibleItemCount, int totalItemCount) {  
  98.         this.visibleItemCount = visibleItemCount;  
  99.         mLastItem = firstVisibleItem + visibleItemCount - 1;  
  100.         if (mListViewAdapter.count > mCount) {  
  101.             mListView.removeFooterView(mLoadLayout);  
  102.         }  
  103.     }  
  104.     @Override  
  105.     public void onScrollStateChanged(AbsListView view, int scrollState) {  
  106.         this.scrollState = scrollState;  
  107.  
  108.     }  
  109.     class ListViewAdapter extends BaseAdapter {  
  110.         int count = 10;  
  111.  
  112.         public int getCount() {  
  113.             return count;  
  114.         }  
  115.         public Object getItem(int position) {  
  116.             return position;  
  117.         }  
  118.  
  119.         public long getItemId(int position) {  
  120.             return position;  
  121.         }  
  122.         public View getView(int position, View view, ViewGroup parent) {  
  123.             TextView mTextView;  
  124.             if (view == null) {  
  125.                 mTextView = new TextView(ListViewActivity.this);  
  126.             } else {  
  127.                 mTextView = (TextView) view;  
  128.             }  
  129.             mTextView.setText("Item " + position);  
  130.             mTextView.setTextSize(20f);  
  131.             mTextView.setGravity(Gravity.CENTER);  
  132.             mTextView.setHeight(60);  
  133.             return mTextView;  
  134.         }  
  135.     }  

【編輯推薦】

Android ListView詳解

使用ListView 顯示數據

Android開發:自定義GridView/ListView數據源

Android開發:實現帶圖片和checkbox的listview

Android開發:實現帶圖片和checkbox的listview

責任編輯:zhaolei 來源: 博客園
相關推薦

2017-11-08 14:34:20

圖片fresco程序員

2009-10-28 09:25:18

VB.NET List

2011-05-30 15:58:29

Android ListView 數據

2016-12-02 20:43:34

Android動態加載DL框架

2021-04-18 07:20:09

CMS系統模塊

2025-01-20 09:09:59

2016-09-27 23:54:16

2011-07-06 16:15:46

iPhone 圖片

2009-07-01 17:15:25

ListView數據排Visual Stud

2009-08-11 14:12:27

C# ListView

2013-07-17 16:33:02

下拉刷新listvie滾動到底部加載Android開發學習

2009-08-28 16:14:26

C#實現加載動態庫

2011-06-24 09:01:20

Qt QLibrary dll

2013-09-17 14:00:19

AndroidListView原理

2011-07-21 17:35:11

iPhone Table 圖片

2009-10-27 10:28:33

Silverlight

2022-07-20 11:13:05

前端JSONVue3

2011-07-25 15:32:06

iPhone Table 動態

2011-05-27 15:02:15

Android ListView

2021-10-24 06:50:52

AndroidClassLoaderJava
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲激情第一页 | 国产伦精品一区二区三毛 | 日本精品免费在线观看 | 影音先锋欧美资源 | 精品国产一区二区三区久久久蜜月 | 一区二区国产在线 | 黄色免费av | 在线免费视频一区 | 日本一道本视频 | 国产精品视频久久 | 2022国产精品 | 色屁屁在线观看 | 亚洲综合国产 | 色爱区综合 | 免费不卡视频 | 久久99精品久久久久久国产越南 | 男人av的天堂 | 欧美在线观看一区 | а√中文在线8 | 综合国产第二页 | 成人高清网站 | 国产999在线观看 | 九九免费视频 | 亚洲午夜电影 | 中文字幕av亚洲精品一部二部 | 91av免费观看 | 午夜电影福利 | 国产成人精品免费视频大全最热 | 国产精品久久久久久久久免费樱桃 | 国产午夜精品一区二区三区嫩草 | 99国产精品99久久久久久 | 国产欧美一区二区三区日本久久久 | www日日日 | 一区二区福利视频 | 色久伊人| 狠狠色香婷婷久久亚洲精品 | 日本三级线观看 视频 | 成人精品 | 国产日韩一区 | 久草在线 | 特级生活片 |