ListView實現分頁加載(一)制作Demo


 

一、什么是分頁加載

 

 

      在下面的文章中,我們來講解LitView分頁加載的實現。什么是分頁加載呢?我們先看幾張效果圖吧,如下:

 

                                       

                                     

 

      效果說明:我們向上滑動ListView的時候,當滑動的最底部, 便會出現正在加載的進度條,當加載完成后,會出現加載后的數據。如此反復,這其實就是ListView的分頁加載功能。像這樣的工能,實在是太常見了。那么它是怎么實現的呢?

 

      實現原理很簡單,本質上,其實就是一個自定義的ListView,加上了底布局(即有進度條的那個布局),然后實現了ListView的OnScrollListener監聽而已(即拖動監聽)。下面我們就開始一步一步手把手使用模擬的數據來實現這個功能。

 

二、准備簡單的ListView

      為了准備模擬的數據,我們先搭建一個簡單的普通的ListView出來,因為我們需要這樣一個Demo。搭建完成后,我們再將ListView改成我們自定義的ListView,這樣子你就能看清楚到底是怎么實現的了。

 

    搭建ListView很簡單。首先實現主布局和子項布局。分別如下:

    主布局,activity_main.xml,代碼如下:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5      android:background="#ccffff">
 6      
 7     <ListView
 8         android:id= "@+id/list_view"
 9         android:layout_width="match_parent"
10         android:layout_height="match_parent"
11         android:dividerHeight="5dp"
12         android:divider="#00cc00"></ListView>
13 </LinearLayout>

    子項布局 item.xml,需要用到一張圖片(就是那個刀刀狗),這里讀者自行替換為你自己的圖片即可。代碼如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="wrap_content"
 4     android:layout_height="wrap_content"
 5     android:orientation="horizontal" >
 6     
 7     <ImageView 
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:src="@drawable/me"/>
11     
12     <TextView 
13         android:id="@+id/text_view"
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:text="你好,分頁加載"
17         android:layout_gravity="center_vertical"
18         android:textSize="20sp"/>
19 </LinearLayout>

    好了,布局我們搞定了。下面就開始寫MainActivity中的代碼吧。代碼如下:

 1 package com.fuly.load;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import android.os.Bundle;
 7 import android.app.Activity;
 8 import android.widget.ListView;
 9 
10 public class MainActivity extends Activity {
11     
12     private ListView lv;
13     private List<MyData>  mDatas = new ArrayList<MyData>();
14     private MyAdapter mAdapter;
15 
16 
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20         
21         initData();//該方法初始化數據
22         lv = (ListView) findViewById(R.id.list_view);
23         mAdapter = new MyAdapter(this, mDatas);
24         lv.setAdapter(mAdapter);
25         
26         
27     }
28 
29 
30     /**
31      * 該方法初始化數據,即提供初始的素材
32      */
33     private void initData() {
34         for(int i = 0;i<12;i++){
35             MyData md = new MyData("你好,我是提前設定的");
36             mDatas.add(md);
37         }
38         
39     }
40 }

    當然了,少不了我們的實體類(即封裝數據的類),MyData.代碼如下:

 1 package com.fuly.load;
 2 
 3 public class MyData {
 4     
 5     private String txt;
 6 
 7     public MyData(String txt) {
 8 
 9         this.txt = txt;
10     }
11 
12     public String getTxt() {
13         return txt;
14     }
15 
16     public void setTxt(String txt) {
17         this.txt = txt;
18     }
19 }

    然后就是適配器,代碼如下:

 1 package com.fuly.load;
 2 
 3 import java.util.List;
 4 
 5 import android.content.Context;
 6 import android.view.LayoutInflater;
 7 import android.view.View;
 8 import android.view.ViewGroup;
 9 import android.widget.ArrayAdapter;
10 import android.widget.TextView;
11 
12 public class MyAdapter extends ArrayAdapter {
13     
14     private List<MyData>  Datas;
15     private LayoutInflater inflater;
16 
17     public MyAdapter(Context context, List data) {
18         super(context, -1, data);
19         inflater = LayoutInflater.from(context);
20         Datas = data;
21     }
22     
23 
24     public View getView(int position, View convertView, ViewGroup parent) {
25         
26         ViewHolder vh = null;
27         
28         if(convertView == null){
29             
30             convertView = inflater.inflate(R.layout.item, parent, false);
31             vh = new ViewHolder();
32             vh.tv = (TextView) convertView.findViewById(R.id.text_view);
33             
34             convertView.setTag(vh);
35         }else{
36             vh = (ViewHolder) convertView.getTag();
37         }
38         
39         vh.tv.setText(Datas.get(position).getTxt());
40         
41         return convertView;
42     }
43     
44     class ViewHolder{
45         
46         TextView tv;
47     }
48 }

    好了,ListView的Demo我們已經准備好了。下面是運行效果:

                                                 

    我們看此時是沒有分頁加載的。那么我們還等什么,趕緊進入下一節,實現分頁功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM