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

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

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

Android應(yīng)用開(kāi)發(fā)中,采用ListView組件來(lái)展示數(shù)據(jù)是很常用的功能,當(dāng)一個(gè)應(yīng)用要展現(xiàn)很多的數(shù)據(jù)時(shí),一般情況下都不會(huì)把所有的數(shù)據(jù)一次就展示出來(lái),而是通過(guò)分頁(yè)的形式來(lái)展示數(shù)據(jù),個(gè)人覺(jué)得這樣會(huì)有更好的用戶體驗(yàn)。因此,很多應(yīng)用都是采用分批次加載的形式來(lái)獲取用戶所需的數(shù)據(jù)。例如:微博客戶端可能會(huì)在用戶滑動(dòng)至列表底端時(shí)自動(dòng)加載下一頁(yè)數(shù)據(jù),也可能在底部放置一個(gè)"查看更多"按鈕,用戶點(diǎn)擊后,加載下一頁(yè)數(shù)據(jù)。
下面通過(guò)一個(gè)Demo來(lái)展示ListView功能如何實(shí)現(xiàn):該Demo通過(guò)在ListView列表的底部添加一個(gè)“查看更多...”按鈕來(lái)加載新聞(模擬新聞客戶端)分頁(yè)數(shù)據(jù)。同時(shí)限定每次加載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類是用來(lái)展示ListView列表。布局layout中包含三個(gè)布局文件,分別為: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)前窗口可見(jiàn)項(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) { 
      // 如果是自動(dòng)加載,可以在這里放置異步加載數(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é)果截圖如下:

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

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

相關(guān)文章

最新評(píng)論

江北区| 南昌市| 报价| 敦煌市| 安庆市| 土默特右旗| 五常市| 高密市| 乌拉特前旗| 梅河口市| 宁武县| 五台县| 崇信县| 安乡县| 汉川市| 清水河县| 家居| 稻城县| 珲春市| 绿春县| 浙江省| 乌拉特中旗| 巨鹿县| 炉霍县| 大厂| 旺苍县| 鞍山市| 五指山市| 阳城县| 蒙山县| 凤山县| 吴堡县| 铁岭市| 灌阳县| 吐鲁番市| 宁城县| 临泉县| 通州市| 仙游县| 寻乌县| 民县|