亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android實現ListView分頁自動加載數據的方法

2020-04-11 11:08:31
字體:
來源:轉載
供稿:網友

Android應用開發中,采用ListView組件來展示數據是很常用的功能,當一個應用要展現很多的數據時,一般情況下都不會把所有的數據一次就展示出來,而是通過分頁的形式來展示數據,個人覺得這樣會有更好的用戶體驗。因此,很多應用都是采用分批次加載的形式來獲取用戶所需的數據。例如:微博客戶端可能會在用戶滑動至列表底端時自動加載下一頁數據,也可能在底部放置一個"查看更多"按鈕,用戶點擊后,加載下一頁數據。
下面通過一個Demo來展示ListView功能如何實現:該Demo通過在ListView列表的底部添加一個“查看更多...”按鈕來加載新聞(模擬新聞客戶端)分頁數據。同時限定每次加載10條記錄,但完全加載完數據后,就把ListView列表底部視圖“查看更多...”刪除。假設加載的數據總數為 38 條記錄。先看下該Demo工程的程序結構圖:

其中包 com.andyidea.bean中News.java類是新聞實體類,包com.andyidea.listview中paginationListViewActivity.java類是用來展示ListView列表。布局layout中包含三個布局文件,分別為:list_item.xml , loadmore.xml , main.xml 。下面分別貼下源碼:
layout中的 list_item.xml源碼:

<span style="font-size:13px;"><?xml version="1.0" encoding="utf-8"?> <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:orientation="vertical">  <TextView    android:id="@+id/newstitle"    android:layout_width="fill_parent"    android:layout_height="wrap_content"/>  <TextView    android:id="@+id/newscontent"    android:layout_width="fill_parent"    android:layout_height="wrap_content"/> </LinearLayout></span> 

layout中loadmore.xml源碼:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent">  <Button     android:id="@+id/loadMoreButton"     android:layout_width="fill_parent"     android:layout_height="wrap_content"    android:text="查看更多..." />  </LinearLayout> 

layout中main.xml源碼:

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

包 com.andyidea.bean中News.java類源碼:

package com.andyidea.bean; public class News {      private String title;  //標題   private String content; //內容      public String getTitle() {     return title;   }   public void setTitle(String title) {     this.title = title;   }   public String getContent() {     return content;   }   public void setContent(String content) {     this.content = content;   }  } 

包com.andyidea.listview中paginationListViewActivity.java類源碼:

package com.andyidea.listview;  import java.util.ArrayList; import java.util.List;  import com.andyidea.bean.News;  import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast;  public class PaginationListViewActivity extends Activity implements OnScrollListener {      private ListView listView;    private int visibleLastIndex = 0;  //最后的可視項索引    private int visibleItemCount;    // 當前窗口可見項總數    private int datasize = 38;     //模擬數據集的條數   private PaginationAdapter adapter;    private View loadMoreView;    private Button loadMoreButton;    private Handler handler = new Handler();       /** Called when the activity is first created. */   @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);          loadMoreView = getLayoutInflater().inflate(R.layout.loadmore, null);     loadMoreButton = (Button)loadMoreView.findViewById(R.id.loadMoreButton);     loadMoreButton.setOnClickListener(new View.OnClickListener() {              @Override       public void onClick(View v) {         loadMoreButton.setText("正在加載中...");  //設置按鈕文字         handler.postDelayed(new Runnable() {                      @Override           public void run() {             loadMoreData();             adapter.notifyDataSetChanged();             loadMoreButton.setText("查看更多..."); //恢復按鈕文字           }         },2000);                }     });          listView = (ListView)findViewById(R.id.lvNews);     listView.addFooterView(loadMoreView);  //設置列表底部視圖     initializeAdapter();     listView.setAdapter(adapter);     listView.setOnScrollListener(this);   }      @Override   public void onScrollStateChanged(AbsListView view, int scrollState) {     int itemsLastIndex = adapter.getCount()-1; //數據集最后一項的索引      int lastIndex = itemsLastIndex + 1;     if (scrollState == OnScrollListener.SCROLL_STATE_IDLE         && visibleLastIndex == lastIndex) {       // 如果是自動加載,可以在這里放置異步加載數據的代碼     }   }     @Override   public void onScroll(AbsListView view, int firstVisibleItem,       int visibleItemCount, int totalItemCount) {     this.visibleItemCount = visibleItemCount;     visibleLastIndex = firstVisibleItem + visibleItemCount - 1;          Log.e("========================= ","========================");     Log.e("firstVisibleItem = ",firstVisibleItem+"");     Log.e("visibleItemCount = ",visibleItemCount+"");     Log.e("totalItemCount = ",totalItemCount+"");     Log.e("========================= ","========================");          //如果所有的記錄選項等于數據集的條數,則移除列表底部視圖     if(totalItemCount == datasize+1){       listView.removeFooterView(loadMoreView);       Toast.makeText(this, "數據全部加載完!", Toast.LENGTH_LONG).show();     }   }      /**    * 初始化ListView的適配器    */   private void initializeAdapter(){     List<News> news = new ArrayList<News>();     for(int i=1;i<=10;i++){       News items = new News();       items.setTitle("Title"+i);       items.setContent("This is News Content"+i);       news.add(items);     }     adapter = new PaginationAdapter(news);   }      /**    * 加載更多數據    */   private void loadMoreData(){     int count = adapter.getCount();          if(count+10 <= datasize){       for(int i=count+1; i<=count+10; i++){         News item = new News();         item.setTitle("Title"+i);         item.setContent("This is News Content"+i);         adapter.addNewsItem(item);       }     }else{       for(int i=count+1; i<=datasize; i++){         News item = new News();         item.setTitle("Title"+i);         item.setContent("This is News Content"+i);         adapter.addNewsItem(item);       }     }        }         class PaginationAdapter extends BaseAdapter{          List<News> newsItems;          public PaginationAdapter(List<News> newsitems){       this.newsItems = newsitems;     }      @Override     public int getCount() {       return newsItems.size();     }      @Override     public Object getItem(int position) {       return newsItems.get(position);     }      @Override     public long getItemId(int position) {       return position;     }      @Override     public View getView(int position, View view, ViewGroup parent) {       if(view == null){         view = getLayoutInflater().inflate(R.layout.list_item, null);       }              //新聞標題       TextView tvTitle = (TextView)view.findViewById(R.id.newstitle);       tvTitle.setText(newsItems.get(position).getTitle());       //新聞內容       TextView tvContent = (TextView)view.findViewById(R.id.newscontent);       tvContent.setText(newsItems.get(position).getContent());              return view;     }          /**      * 添加數據列表項      * @param newsitem      */     public void addNewsItem(News newsitem){       newsItems.add(newsitem);     }        }  } 

最后,運行程序的結果截圖如下:

通過上面的截圖,當我們點擊"查看更多..."按鈕時,就會加載下10條記錄,當加載完所有的記錄后,ListView的底部視圖將會移除。

希望本文所述對大家學習Android軟件編程有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文欧美日本在线资源| 久久久久免费视频| 91香蕉亚洲精品| 亚洲国产精品热久久| 国产三级精品网站| 热99精品里视频精品| 国产日产欧美a一级在线| 欧美激情精品久久久久久久变态| 亚洲精品久久久久中文字幕二区| 一区二区三区无码高清视频| 久久久免费观看视频| 亚洲国产欧美自拍| 国产成人精品久久亚洲高清不卡| 日韩电影在线观看免费| 成人福利视频在线观看| 亚洲国产欧美一区二区丝袜黑人| 成人性生交大片免费看小说| 91社影院在线观看| 色悠悠国产精品| 亚洲欧洲中文天堂| 久久久亚洲精选| 九九热精品在线| 欧美激情一级欧美精品| 国内成人精品视频| 精品久久久国产精品999| 国产日韩精品综合网站| 亚洲人成网站777色婷婷| 欧美在线视频在线播放完整版免费观看| 亚洲影院色在线观看免费| 国产精品6699| 欧美成人四级hd版| 欧美—级高清免费播放| 久久久久久久久久av| 国产在线精品成人一区二区三区| 久久夜精品香蕉| 九九精品视频在线观看| 久久久国产一区| 91精品国产网站| 成人性教育视频在线观看| 国产欧美精品日韩精品| 久久久久久久久久久久久久久久久久av| 国内精品视频一区| 久久久精品一区| 95av在线视频| 国外日韩电影在线观看| 亚洲区在线播放| 亚洲bt欧美bt日本bt| 国自在线精品视频| 亚洲日本欧美日韩高观看| 久久在线免费观看视频| 欧美精品videossex性护士| 综合久久五月天| 国产91成人video| 国产精品jizz在线观看麻豆| 色婷婷亚洲mv天堂mv在影片| 日韩精品视频免费在线观看| 不卡毛片在线看| 正在播放亚洲1区| 日韩福利视频在线观看| 国产欧美一区二区三区在线| 欧美大荫蒂xxx| 欧美区在线播放| 午夜精品一区二区三区在线视频| 国语自产偷拍精品视频偷| 欧美电影免费观看高清| 久久不射热爱视频精品| 日韩网站在线观看| 日韩在线小视频| 尤物yw午夜国产精品视频明星| 国产精品偷伦一区二区| 亚洲国产精品嫩草影院久久| 久久久精品2019中文字幕神马| 欧美成人免费播放| 欧美精品在线视频观看| 国产欧美最新羞羞视频在线观看| 亚洲色图校园春色| 亚洲精品久久久一区二区三区| 最近中文字幕2019免费| 成人网页在线免费观看| 久久伊人91精品综合网站| 日本成人黄色片| 性欧美办公室18xxxxhd| 国产在线播放91| 国产脚交av在线一区二区| 91免费看国产| 亚洲欧美一区二区三区在线| 欧美成人精品在线视频| 亚洲成av人乱码色午夜| 日韩美女激情视频| 精品亚洲一区二区| 亚洲视频一区二区| 中文字幕日韩视频| 日韩成人在线网站| 亚洲综合在线做性| 国产成人精品一区二区在线| 国产亚洲精品久久久久久| 国产成人亚洲综合91| 九九热这里只有精品免费看| 久久久精品一区二区| 久久久亚洲国产| 亚洲第一在线视频| 国内免费久久久久久久久久久| 国产精品男女猛烈高潮激情| 成人黄色免费片| 亚洲免费av电影| 欧美精品制服第一页| 欧美视频第一页| 亚洲国产私拍精品国模在线观看| 亚洲自拍另类欧美丝袜| 国产成人精彩在线视频九色| 国产欧美日韩精品丝袜高跟鞋| 精品动漫一区二区| 日韩精品免费在线播放| 亚洲综合最新在线| 国模极品一区二区三区| 欧美一性一乱一交一视频| 亚洲国产精品久久久| 日韩av一区在线观看| 69影院欧美专区视频| 国产欧美精品在线| 亚洲精品中文字| 欧美午夜精品久久久久久浪潮| 欧美国产中文字幕| 国产精品中文字幕在线观看| 日本欧美一二三区| 一夜七次郎国产精品亚洲| 久久久女人电视剧免费播放下载| 亚洲伊人久久大香线蕉av| 91沈先生作品| 66m—66摸成人免费视频| 日韩av电影在线免费播放| 综合国产在线观看| 欧美日韩一区免费| 成人精品网站在线观看| 九九精品视频在线观看| 日韩中文字幕欧美| 欧美性猛交xxxx免费看| 国产999精品| 日韩激情在线视频| 日韩欧美在线播放| 国产suv精品一区二区三区88区| 亚洲一区www| 色悠悠国产精品| 日韩成人在线播放| 久久久久久噜噜噜久久久精品| 欧洲一区二区视频| 国产一区二区三区久久精品| 免费成人高清视频| 欧美中文字幕在线| 成人激情视频在线观看| 国产精品青青在线观看爽香蕉| 欧美国产第一页| 国产69久久精品成人| 国产成人精品av| 91网站免费观看| 久久99精品国产99久久6尤物| 日韩中文字幕国产精品| 亚洲第一网站免费视频| 日韩av免费观影| 欧美精品生活片| 亚洲一区二区精品| 日韩亚洲成人av在线| 7m第一福利500精品视频| 国产极品jizzhd欧美|