ListView的分頁顯示

有的時候,ListView的數據是從網上傳來的,用戶不需要那麼多的數據,

那麼就先讓它顯示其中一小部分,然後讓用戶自己去點擊加載剩餘數據。

代碼實現:

佈局文件-主layout
<?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" >


  <ListView 
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:id="@+id/lv_list"
      ></ListView>


</LinearLayout>
佈局文件-items
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tv_item"
    />
    
</LinearLayout>
佈局文件-listview底部view
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    android:id="@+id/fl_more"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >


    <LinearLayout
        android:id="@+id/ll_wait"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:orientation="horizontal"
        android:gravity="center_vertical"
        android:visibility="invisible"
        >
        <ProgressBar 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        <TextView 
            android:text="正在加載請稍等..."
            android:textSize="20sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </LinearLayout>
    
         <LinearLayout
        android:id="@+id/ll_more"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:orientation="vertical"
        >
         <TextView 
            android:text="查看更多"
            android:textSize="20sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        </LinearLayout>


</FrameLayout>

代碼:activty
package com.hwh.list;


import java.util.ArrayList;
import java.util.List;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ListView;


public class ListDemoActivity extends Activity {
private ListView lv_list;
private List<String> data;//總數據集合
private List<String> show_data;//要顯示的數據集合
private LinearLayout ll_wait;//等待中的界面
private LinearLayout ll_more;//顯示跟多的界面
private ListAdapter adapter;//數據適配器
private View view;//listview的底部view
private Handler handler=new Handler()
{
public void handleMessage(Message msg) {
if(msg.what==10)
{
ll_wait.setVisibility(LinearLayout.INVISIBLE);
ll_more.setVisibility(LinearLayout.VISIBLE);
setShowData(5);
adapter.setData(show_data);
adapter.notifyDataSetChanged();
//如果要顯示的數據和總數據的大小一樣則不顯示更多條目
if (show_data.size() == data.size()) {
lv_list.removeFooterView(view);
}
}
};
};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv_list=(ListView) findViewById(R.id.lv_list);
        data=new ArrayList<String>();
        show_data=new ArrayList<String>();
        //使用假數據模擬從網上請求
        for(int i=1;i<=20;i++)
        {
        data.add(i+"條數據,分頁顯示");
        }
        setShowData(5);
        view=initFooterView();
        lv_list.addFooterView(view);//添加底部的view
        adapter=new ListAdapter(show_data, this);
        lv_list.setAdapter(adapter);
    }
    /**
     * 設置每頁顯示幾條
     * @param pagesize
     */
    public void setShowData(int pagesize)
    {
    int index=show_data.size();
    for(int i=0;i<pagesize;i++)
    {
    show_data.add(data.get(index+i));
    }
    }
    /**
     * 初始化底部的view並返回
     * @return
     */
    public View initFooterView()
    {
    FrameLayout view=(FrameLayout) View.inflate(this, R.layout.more_item, null);
    ll_wait=(LinearLayout) view.findViewById(R.id.ll_wait);
    ll_more=(LinearLayout) view.findViewById(R.id.ll_more);
    view.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
ll_wait.setVisibility(LinearLayout.VISIBLE);
ll_more.setVisibility(LinearLayout.INVISIBLE);
new Thread(){
public void run() {
try {
//模擬聯網的延遲
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msg=handler.obtainMessage(10);
handler.sendMessage(msg);
};
}.start();
}
});
    return view;
    }
}
代碼:數據適配器
package com.hwh.list;


import java.util.List;


import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;


public class ListAdapter extends BaseAdapter {


private List<String> data;
private Context context;
private static TextView tv;

public void setData(List<String> data) {
this.data = data;
}


public ListAdapter(List<String> data, Context context) {
this.data = data;
this.context = context;
}


@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}


@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return data.get(position);
}


@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
String str=data.get(position);
View view;
if(convertView!=null)
{
view=convertView;
}
else
{
view=View.inflate(context, R.layout.list_items, null);
}
tv=(TextView) view.findViewById(R.id.tv_item);
tv.setText(str);
return view;
}


}


這裏只是ListView分頁的簡單實現,具體的功能還得看項目中的業務需求。


------不足之處請大家指出,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章