自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ListView動態(tài)加載數(shù)據(jù)模板

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

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

 

 

如果覺得滿意的話就繼續(xù)看下面的代碼吧,筆者這里沒有用到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中加載數(shù)據(jù)  
  26.     private final LayoutParams mLayoutParams = new LinearLayout.LayoutParams(  
  27.             LinearLayout.LayoutParams.WRAP_CONTENT,  
  28. LinearLayout.LayoutParams.WRAP_CONTENT);  
  29.     int scrollState;// 全局變量,用來記錄ScrollView的滾動狀態(tài),1表示開始滾動,2表示正在滾動,0表示滾動停止  
  30.     int visibleItemCount;// 當前可見頁面中的Item總數(shù)  
  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的區(qū)別  
  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.                                 // 獲取數(shù)據(jù)成功時把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 顯示數(shù)據(jù)

Android開發(fā):自定義GridView/ListView數(shù)據(jù)源

Android開發(fā):實現(xiàn)帶圖片和checkbox的listview

Android開發(fā):實現(xiàn)帶圖片和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 數(shù)據(jù)

2016-12-02 20:43:34

Android動態(tài)加載DL框架

2021-04-18 07:20:09

CMS系統(tǒng)模塊

2025-01-20 09:09:59

2016-09-27 23:54:16

2011-07-06 16:15:46

iPhone 圖片

2013-07-17 16:33:02

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

2009-07-01 17:15:25

ListView數(shù)據(jù)排Visual Stud

2011-06-24 09:01:20

Qt QLibrary dll

2009-08-28 16:14:26

C#實現(xiàn)加載動態(tài)庫

2009-08-11 14:12:27

C# ListView

2009-10-27 10:28:33

Silverlight

2011-07-21 17:35:11

iPhone Table 圖片

2011-07-25 15:32:06

iPhone Table 動態(tài)

2022-07-20 11:13:05

前端JSONVue3

2013-09-17 14:00:19

AndroidListView原理

2011-05-27 15:02:15

Android ListView

2021-10-24 06:50:52

AndroidClassLoaderJava
點贊
收藏

51CTO技術棧公眾號