Listview 分頁 實現

package com.wanghf.demo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import com.wanghf.demo.R;

public class ListViewForPagingActivity extends Activity {

	/** Called when the activity is first created. */
	ListView view;
	Button btnUp, btnDown;
	View.OnClickListener cl;

	ListAdapter adapter;
	List<Map<String, Object>> data;
	Map<String, Object> map;
	List<Map<String, Object>> list;
	// 用於顯示每列10個Item項。
	int VIEW_COUNT = 10;

	// 用於顯示頁號的索引
	int index = 0;
	// 總列數
	int batchCount = 0;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		this.setTitle("ListViewForPaging");
		view = (ListView) findViewById(R.id.listview);
		btnUp = (Button) findViewById(R.id.but_up);
		btnDown = (Button) findViewById(R.id.but_down);
		// 初始化 元數據
		data = getInitData();
		cl = new Button.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				switch (v.getId()) {
				case R.id.but_up:
					upView();
					break;

				case R.id.but_down:
					downView();
					break;
				}
			}
		};
		// 添加2個Button的監聽事件。
		btnUp.setOnClickListener(cl);
		btnDown.setOnClickListener(cl);

		checkButton();
		String[] from = new String[] { "id", "name", "phone", "address" };
		int[] to = new int[] { R.id.item1, R.id.item2, R.id.item3, R.id.item4 };
		adapter = new ListAdapter(this, data, R.layout.result_table_four, from,
				to);

		view.setAdapter(adapter);
		adapter.notifyDataSetChanged();
	}

	private List<Map<String, Object>> getInitData() {
		list = new ArrayList<Map<String, Object>>();
		
		for (int i = 1; i < 100; i++) {
			map = new HashMap<String, Object>();
			map.put("id", i);
			map.put("name", "wang" + i + "dan");

			map.put("phone", "1870290" + i + "9");

			map.put("address", "西安軟件園" + i + "號");

			list.add(map);
		}
		return list;
	}

	// 點擊左邊的Button,表示向前翻頁,索引值要減1.
	public void upView() {
		index--;
		// 刷新ListView裏面的數值。
		// adapter.
		adapter.notifyDataSetChanged();

		// 檢查Button是否可用。
		checkButton();
	}

	// 點擊右邊的Button,表示向後翻頁,索引值要加1.
	public void downView() {
		index++;
		// 刷新ListView裏面的數值。
		adapter.notifyDataSetChanged();

		// 檢查Button是否可用。
		checkButton();
	}

	public void checkButton() {

		if (index <= 0) {
			btnUp.setEnabled(false);
			btnDown.setEnabled(true);
		}

		else if (list.size() - index * VIEW_COUNT <= VIEW_COUNT) {
			btnUp.setEnabled(true);
			btnDown.setEnabled(false);
		} else {
			btnUp.setEnabled(true);
			btnDown.setEnabled(true);
		}

	}

	public class ListAdapter extends SimpleAdapter {
		private List<? extends Map<String, ?>> data;
		LayoutInflater mInflater;

		public ListAdapter(Context context, List<Map<String, Object>> mdata,
				int resource, String[] from, int[] to) {
			super(context, mdata, resource, from, to);
			mInflater = LayoutInflater.from(context);
			data = mdata;
		}

		// 設置每一頁的長度,默認的是View_Count的值。
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			// return data.length;

			// ori表示到目前爲止的前幾頁的總共的個數。
			int ori = VIEW_COUNT * index;

			if (list.size() - ori < VIEW_COUNT) {
				return list.size() - ori;
			} else {
				return VIEW_COUNT;
			}

		}

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

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

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder;
			// TODO Auto-generated method stub
			if (convertView == null) {
				holder = new ViewHolder();
				convertView = mInflater.inflate(R.layout.result_table_four,
						null);
				holder.id = (TextView) convertView.findViewById(R.id.item1);
				holder.name = (TextView) convertView.findViewById(R.id.item2);
				holder.phone = (TextView) convertView.findViewById(R.id.item3);
				holder.address = (TextView) convertView
						.findViewById(R.id.item4);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			// holder.item1.setText((String) data.get(position).get("item1"));
			holder.id.setText(data.get(position + index * VIEW_COUNT).get(
					"id").toString());
			holder.name.setText((String) data
					.get(position + index * VIEW_COUNT).get("name"));
			holder.phone.setText((String) data.get(
					position + index * VIEW_COUNT).get("phone"));
			holder.address.setText((String) data.get(
					position + index * VIEW_COUNT).get("address"));
			return convertView;
		}
	}

	public class ViewHolder {
		public TextView id;
		public TextView name;
		public TextView phone;
		public TextView address;
	}
}

XML 文件 (main.xml,    result_table_four.xml)

<?xml version="1.0" encoding="UTF-8"?>

<LinearLayout android:orientation="vertical"
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_height="fill_parent" android:layout_width="fill_parent"
	android:minWidth="270dip" android:background="@drawable/zbgimg">
	<!-- ==============================table========================= -->
	<TableLayout android:orientation="vertical"
		android:layout_height="fill_parent" android:layout_width="wrap_content">

			<!--  
		<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
			android:orientation="vertical" android:layout_height="fill_parent"
			android:layout_width="fill_parent">
				-->
			<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
				android:orientation="vertical" android:layout_height="fill_parent"
				android:layout_width="fill_parent">
				<TableLayout android:orientation="vertical"
					android:layout_height="wrap_content" android:layout_width="fill_parent">

					<TableLayout android:id="@+id/layouthead"
						android:layout_height="fill_parent" android:layout_width="fill_parent"
						android:focusable="true" android:clickable="true"
						android:focusableInTouchMode="true" android:keepScreenOn="true"
						android:textColor="#FFF">
						<TableRow>
						
							<TextView android:id="@+id/title1" android:text="id"
								android:layout_height="wrap_content" android:width="20dip"
								android:textStyle="bold" android:textSize="16dip"
								android:layout_width="wrap_content" android:editable="true"
								android:gravity="center" android:background="@drawable/pading"
								android:textColor="#FFF" />

							<TextView android:id="@+id/title2" android:text="name"
								android:layout_height="wrap_content" android:textStyle="bold"
								android:width="100dip" android:gravity="center"
								android:background="@drawable/pading" android:layout_width="wrap_content"
								android:textSize="16dip" android:editable="true"
								android:textColor="#FFF" />

							<TextView android:id="@+id/title3" android:editable="true"
								android:text="phone" android:gravity="center" android:background="@drawable/pading"
								android:textSize="16dip" android:textStyle="bold" android:width="100dip"
								android:layout_width="wrap_content" android:layout_height="wrap_content"
								android:textColor="#FFF" />

							<TextView android:id="@+id/title4" android:text="address"
								android:layout_height="wrap_content" android:textColor="#FFF"
								android:editable="true" android:gravity="center"
								android:background="@drawable/pading" android:textSize="16dip"
								android:textStyle="bold" android:width="115dip"
								android:layout_width="wrap_content" />
						</TableRow>
					</TableLayout>

					<View android:layout_width="fill_parent"
						android:layout_height="1dip" android:background="?android:attr/listDivider" />

					<TableLayout android:layout_width="wrap_content"
						android:layout_height="350dip">
						<!--
						android:minHeight="300dip"
					-->
						<ListView android:id="@+id/listview" android:layout_height="fill_parent" style="@style/list_view_style" android:layout_width="fill_parent"></ListView>

					</TableLayout>
					<LinearLayout android:layout_width="fill_parent"
						android:layout_height="wrap_content" android:orientation="horizontal"
						android:gravity="center">

						<Button android:id="@+id/but_up" android:text="page up"
							android:layout_width="130dip" android:layout_height="wrap_content" />

						<Button android:id="@+id/but_down" android:text="page down"
							android:layout_width="130dip" android:layout_height="wrap_content" />

					</LinearLayout>
				</TableLayout>
			</ScrollView>
	</TableLayout>
</LinearLayout>

<?xml version="1.0" encoding="UTF-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal" android:layout_width="wrap_content"
	android:layout_height="fill_parent" android:id="@+id/row">
	<TableRow>
		<TextView android:id="@+id/item1" android:layout_height="fill_parent"
			android:gravity="center" android:background="@drawable/pading"
			android:layout_width="wrap_content" android:width="20dip"
			android:textColor="#FFF" android:focusable="false" android:textSize="16.1dip" />

		<TextView android:id="@+id/item2" 
			android:focusable="false" android:layout_height="fill_parent"
			android:width="100dip" android:layout_width="wrap_content"
			android:textColor="#FFF" android:gravity="center" android:background="@drawable/pading"
			android:textSize="16.1dip" />

		<TextView android:id="@+id/item3" 
			android:focusable="false" android:textColor="#FFF"
			android:layout_width="wrap_content" android:gravity="center"
			android:background="@drawable/pading" android:layout_height="fill_parent"
			android:width="100dip" android:textSize="16.1dip" />

		<TextView android:id="@+id/item4" android:layout_height="fill_parent"
			android:focusable="false" android:textColor="#FFF" android:width="115dip"
			 android:gravity="center" android:background="@drawable/pading"
			android:layout_width="wrap_content" android:textSize="16.1dip" />
	</TableRow>
</TableLayout>  

效果圖:



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