欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實(shí)現(xiàn)ListView分頁自動加載數(shù)據(jù)的方法

 更新時間:2015年12月23日 11:09:43   作者:cjjky  
這篇文章主要介紹了Android實(shí)現(xiàn)ListView分頁自動加載數(shù)據(jù)的方法,涉及Android生成listview列表的相關(guān)技巧,需要的朋友可以參考下

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

其中包 com.andyidea.bean中News.java類是新聞實(shí)體類,包c(diǎn)om.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中l(wèi)oadmore.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;  //標(biāo)題 
  private String content; //內(nèi)容 
   
  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; 
  } 
 
} 

包c(diǎn)om.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;  //最后的可視項(xiàng)索引  
  private int visibleItemCount;    // 當(dāng)前窗口可見項(xiàng)總數(shù)  
  private int datasize = 38;     //模擬數(shù)據(jù)集的條數(shù) 
  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("正在加載中...");  //設(shè)置按鈕文字 
        handler.postDelayed(new Runnable() { 
           
          @Override 
          public void run() { 
            loadMoreData(); 
            adapter.notifyDataSetChanged(); 
            loadMoreButton.setText("查看更多..."); //恢復(fù)按鈕文字 
          } 
        },2000); 
         
      } 
    }); 
     
    listView = (ListView)findViewById(R.id.lvNews); 
    listView.addFooterView(loadMoreView);  //設(shè)置列表底部視圖 
    initializeAdapter(); 
    listView.setAdapter(adapter); 
    listView.setOnScrollListener(this); 
  } 
   
  @Override 
  public void onScrollStateChanged(AbsListView view, int scrollState) { 
    int itemsLastIndex = adapter.getCount()-1; //數(shù)據(jù)集最后一項(xiàng)的索引  
    int lastIndex = itemsLastIndex + 1; 
    if (scrollState == OnScrollListener.SCROLL_STATE_IDLE 
        && visibleLastIndex == lastIndex) { 
      // 如果是自動加載,可以在這里放置異步加載數(shù)據(jù)的代碼 
    } 
  } 
 
 
  @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("========================= ","========================"); 
     
    //如果所有的記錄選項(xiàng)等于數(shù)據(jù)集的條數(shù),則移除列表底部視圖 
    if(totalItemCount == datasize+1){ 
      listView.removeFooterView(loadMoreView); 
      Toast.makeText(this, "數(shù)據(jù)全部加載完!", 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); 
  } 
   
  /** 
   * 加載更多數(shù)據(jù) 
   */ 
  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); 
      } 
       
      //新聞標(biāo)題 
      TextView tvTitle = (TextView)view.findViewById(R.id.newstitle); 
      tvTitle.setText(newsItems.get(position).getTitle()); 
      //新聞內(nèi)容 
      TextView tvContent = (TextView)view.findViewById(R.id.newscontent); 
      tvContent.setText(newsItems.get(position).getContent()); 
       
      return view; 
    } 
     
    /** 
     * 添加數(shù)據(jù)列表項(xiàng) 
     * @param newsitem 
     */ 
    public void addNewsItem(News newsitem){ 
      newsItems.add(newsitem); 
    } 
     
  } 
 
} 

最后,運(yùn)行程序的結(jié)果截圖如下:

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

希望本文所述對大家學(xué)習(xí)Android軟件編程有所幫助。

相關(guān)文章

  • Kotlin by lazy關(guān)鍵字深入探究實(shí)現(xiàn)原理

    Kotlin by lazy關(guān)鍵字深入探究實(shí)現(xiàn)原理

    這篇文章主要介紹了by lazy,在kotlin中使用是很常見的,用于實(shí)現(xiàn)懶加載某個數(shù)據(jù)。而這兩個單詞不是一體的,其中by是kotlin中的關(guān)鍵字,用于實(shí)現(xiàn)委托;lazy是一個方法,他的返回值是委托的具體對象
    2022-11-11
  • Kotlin開發(fā)中open關(guān)鍵字與類名函數(shù)名和變量名的使用方法淺析

    Kotlin開發(fā)中open關(guān)鍵字與類名函數(shù)名和變量名的使用方法淺析

    這篇文檔中,我們將解釋如何以及為什么將 open 關(guān)鍵字與類名、函數(shù)名和變量名一起使用,了解內(nèi)部原理是為了幫助我們做擴(kuò)展,同時也是驗(yàn)證了一個人的學(xué)習(xí)能力,如果你想讓自己的職業(yè)道路更上一層樓,這些底層的東西你是必須要會的
    2023-02-02
  • Android中音視頻合成的幾種方案詳析

    Android中音視頻合成的幾種方案詳析

    隨著音視頻領(lǐng)域的火熱,在很多領(lǐng)域(教育,游戲,娛樂,體育,跑步,餐飲,音樂等)嘗試做音視頻功能,下面這篇文章主要給大家介紹了關(guān)于Android中音視頻合成的幾種方案的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。
    2017-12-12
  • Android中定時執(zhí)行任務(wù)的3種實(shí)現(xiàn)方法(推薦)

    Android中定時執(zhí)行任務(wù)的3種實(shí)現(xiàn)方法(推薦)

    下面小編就為大家?guī)硪黄狝ndroid中定時執(zhí)行任務(wù)的3種實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • Android實(shí)現(xiàn)探探圖片滑動效果

    Android實(shí)現(xiàn)探探圖片滑動效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)探探圖片滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • android傳送照片到FTP服務(wù)器的實(shí)現(xiàn)代碼

    android傳送照片到FTP服務(wù)器的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了android傳送照片到FTP服務(wù)器的實(shí)現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android多種方式實(shí)現(xiàn)相機(jī)圓形預(yù)覽的示例代碼

    Android多種方式實(shí)現(xiàn)相機(jī)圓形預(yù)覽的示例代碼

    這篇文章主要介紹了Android多種方式實(shí)現(xiàn)相機(jī)圓形預(yù)覽的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Android應(yīng)用開發(fā)工程目錄作用介紹

    Android應(yīng)用開發(fā)工程目錄作用介紹

    這篇文章主要介紹了Android應(yīng)用開發(fā)工程目錄作用介紹,本文對Android項(xiàng)目中的每個目錄的作用作了總結(jié),需要的朋友可以參考下
    2014-10-10
  • 利用HorizontalScrollView實(shí)現(xiàn)滑動頁面時的縮放效果

    利用HorizontalScrollView實(shí)現(xiàn)滑動頁面時的縮放效果

    這篇文章主要為大家詳細(xì)介紹了利用HorizontalScrollView實(shí)現(xiàn)滑動頁面時的縮放效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Flutter繪制之路徑聯(lián)合詳解

    Flutter繪制之路徑聯(lián)合詳解

    在Flutter繪制中,path路徑可謂是繪制中的核心,通過path路徑可以繪制出任意的二維圖形,所以本文就來和大家聊聊Flutter中路徑聯(lián)合的相關(guān)知識,感興趣的可以了解一下
    2023-06-06

最新評論