有的時候,ListView的數據是從網上傳來的,用戶不需要那麼多的數據,
那麼就先讓它顯示其中一小部分,然後讓用戶自己去點擊加載剩餘數據。
代碼實現:
<?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> |
<?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> |
<?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> |
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分頁的簡單實現,具體的功能還得看項目中的業務需求。
------不足之處請大家指出,謝謝。