展会信息港展会大全

Android分页工具类的实现
来源:互联网   发布日期:2016-01-14 11:24:33   浏览:1219次  

导读:我们在项目开发中,经常需要频繁的使用Android分页,所以有必要实现一个封装的类来统一管理实现。首先看下效果图:从上图我们可以看出,这里是将listview中的数据通过底下的分页工具实现分页显示。那我们接下来先......

我们在项目开发中,经常需要频繁的使用Android分页,所以有必要实现一个封装的类来统一管理实现。

首先看下效果图:

从上图我们可以看出,这里是将listview中的数据通过底下的分页工具实现分页显示。那我们接下来先贴出代码:

第一步:实现布局,这里有两个布局文件,第一个主布局文件main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/whole_region"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<HorizontalScrollView

android:id="@+id/HorizontalScrollView01"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_above="@+id/pagebtn"

android:layout_alignParentTop="true" >

<LinearLayout

android:layout_width="wrap_content"

android:layout_height="fill_parent"

android:orientation="vertical" >

<LinearLayout

android:id="@+id/list_view_title"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="horizontal" >

</LinearLayout>

<ListView

android:id="@+id/list"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:fadeScrollbars="false" >

</ListView>

</LinearLayout>

</HorizontalScrollView>

<LinearLayout

android:id="@id/pagebtn"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:orientation="vertical" >

<include layout="@layout/pagebutton" />

</LinearLayout>

</RelativeLayout>

第二个布局文件pagebutton.xml.这个文件嵌套在第一个主文件中。

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

<merge xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<TableLayout

android:id="@+id/TableLayout1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:paddingLeft="5dip"

android:paddingRight="5dip"

android:paddingTop="5dip"

android:shrinkColumns="0,1,2,3,4,5,6,7"

android:stretchColumns="0,1,2,3,4,5,6,7" >

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="共"

android:textSize="18sp" />

<TextView

android:id="@+id/total_page_num"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:minWidth="30dp"

android:textColor="#C71585"

android:textSize="18sp" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="页"

android:textSize="18sp" />

<TextView

android:id="@+id/total_record_num"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:minWidth="60dp"

android:textColor="#C71585"

android:textSize="18sp" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="条,"

android:textSize="18sp" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="每页"

android:textSize="18sp" />

<TextView

android:id="@+id/record_num_each_page"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="#C71585"

android:textSize="18sp" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="条"

android:textSize="18sp" />

</TableRow>

</TableLayout>

<TableLayout

android:id="@+id/TableLayout1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:paddingTop="5dip"

android:shrinkColumns="0,1,2,3,4,5,6,7,8"

android:stretchColumns="0,1,2,3,4,5,6,7" >

<TableRow>

<Button

android:id="@+id/first_page"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="|<"

android:textSize="18sp" />

<Button

android:id="@+id/page_up"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text=" < "

android:textSize="18sp" />

<Button

android:id="@+id/page_down"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text=" > "

android:textSize="18sp" />

<Button

android:id="@+id/last_page"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text=">|"

android:textSize="18sp" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="第"

android:textSize="18sp" />

<EditText

android:id="@+id/current_page"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:maxWidth="40dip"

android:singleLine="true"

android:textColor="#C71585"

android:textSize="18sp" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="页"

android:textSize="18sp" />

<Button

android:id="@+id/to_page"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="转到"

android:textSize="18sp" />

</TableRow>

</TableLayout>

</merge>

第二步:新建一个activity,用来显示界面

public class BuilderList1 extends QueryContextActivity {

private PagedQueryResultHelper pagedQueryResultHelper;

private Map<String, Object> params;

private ListView list;

private List<Integer> columnWidths;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.mynotifylist);

setOnClickListener();

columnWidths = new ArrayList<Integer>();

int weight = this.getWindowManager().getDefaultDisplay().getWidth();

columnWidths.add(weight);

pagedQueryResultHelper = new PagedQueryResultHelper(this);

pagedQueryResultHelper.setTitleCellWidth(columnWidths);

// 这个方法是用来查询数据并显示在LISTVIEW中的,我们这次的重点不在这里,我只列出不详讲,有兴趣的朋友可以自己研究下listview

// query();

}

protected void query() {

params = new HashMap<String, Object>();

params.put("userName", UserInfo.getUserName());

pagedQueryResultHelper.setQueryParams("getBuilderList", params,

"startNum", "endNum", "MyNotifyList", R.array.build_list_name,

R.array.build_list);

if (pagedQueryResultHelper.initialQuery() == null) {

new AlertDialog.Builder(this)

.setTitle(R.string.message_title)

.setMessage("没有查询到相关信息,请返回!")

.setPositiveButton(R.string.OK_text, null)

.setPositiveButton(R.string.OK_text,

new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog,

int which) {

BuilderList1.this.finish();

}

}).show();

}

;

list = (ListView) findViewById(R.id.list);

list.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> adapterView, View view,

int index, long arg3) {

List<Map<String, Object>> data = pagedQueryResultHelper

.getWholeResult();

Intent intent = new Intent(BuilderList1.this, FloorInfo.class);

intent.putExtra("value", (Serializable) data.get(index));

intent.putExtra("buildid", data.get(index).get("BUILDID")

.toString());

startActivity(intent);

}

});

}

@Override

public void onClick(View arg0) {

switch (arg0.getId()) {

case R.id.first_page:

pagedQueryResultHelper.firstPage();

break;

case R.id.page_down:

pagedQueryResultHelper.pageDown();

break;

case R.id.page_up:

pagedQueryResultHelper.pageUp();

break;

case R.id.last_page:

pagedQueryResultHelper.lastPage();

break;

case R.id.to_page:

pagedQueryResultHelper.toPage();

break;

}

}

@Override

protected void clear() {

}

@Override

protected void setOnClickListener() {

}

}

第三步:实现这个工具类,这个类代码有些多

package org.Base.Utils;

import java.util.Arrays;

import java.util.List;

import java.util.Map;

import org.Base.Activities.QueryContextActivity;

import org.Base.Container.DataTableAdapter;

import org.Base.Container.myListViewTitle;

import org.Base.Webservice.WSObjectListUtil;

import org.Base.Webservice.WSObjectMapUtil;

import org.Base.Webservice.WSObjectUtil;

import org.Base.Webservice.WSUtil;

import org.Base.Webservice.WebServiceConfig;

import org.DigitalCM.R;

import org.ksoap2.serialization.SoapObject;

import android.app.AlertDialog;

import android.util.Log;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ListView;

import android.widget.TextView;

public class PagedQueryResultHelper {

private final static int initialFromRecordNum = 1;// 每页从第1条开始

private final static int initialToRecordNum = 20;// 每页可以显示20条

public PagedQueryResultHelper(QueryContextActivity contextActivity) {// 构造函数用来初始化,主要是用来接收传过来的activity做为上下文对象

this.contextActivity = contextActivity;

findViews();// 调用此方法找到传过来的activity的控件对象

setOnClickListener();// 给控件设置监听

if (currentPageText != null) {// 如果所有页面只有一页,那就只显示一页

setCurrentPage(1);

}

}

public List<List<String>> initialQuery() {

setRecordNumEachPage(initialToRecordNum - initialFromRecordNum + 1);// 设置每页的记录条数

return query(initialFromRecordNum, initialToRecordNum);

}

public List<List<String>> initialQuery01() {

return query(methodName, params);

}

private void setCurrentPage(int currentPage) {// 设置当前页

this.currentPage = currentPage;

currentPageText.setText(String.valueOf(currentPage));

}

public void setMarkable(boolean bMarkable) {// 这个是用来标记记录的

this.bMarkable = bMarkable;

}

public void setRecordNumEachPage(int recordNumEachPage) {);//设置每页的记录条数

this.recordNumEachPage = recordNumEachPage;

recordNumEachPageText.setText(String.valueOf(recordNumEachPage));

}

public void setTotalRecord(int totalRecord) {// 设置总记录数

this.totalRecord = totalRecord;

totalRecordNumText.setText(String.valueOf(totalRecord));

getTotalPageNumText();

}

private QueryContextActivity contextActivity;

private TextView totalPageNumText;

private TextView totalRecordNumText;

private TextView recordNumEachPageText;

private Button firstPage;

private Button pageDown;

private Button pageUp;

private Button lastPage;

private EditText currentPageText;

private Button toPage;

private int totalPage;

private int totalRecord;

private int recordNumEachPage;

private int currentPage;

private String fromRecordNumField;

private String toRecordNumField;

private String methodName;

private Map<String, Object> params;

private String contentTableName;

// private String countTableName;

private int headerNameId;

private int headerId;

private List<Integer> columnWidths = null;

private boolean bSetTitleValue = false;

private List<Map<String, Object>> wholeresult = null;

private List<List<String>> rows = null;

private boolean bMarkable = false;

private DataTableAdapter dataTableAdapter;

public void setQueryParams(String methodName, Map<String, Object> params,

String fromRecordNumField, String toRecordNumField,

String contentTableName, int headerNameId, int headerId) {

this.methodName = methodName;

this.params = params;

this.fromRecordNumField = fromRecordNumField;

this.toRecordNumField = toRecordNumField;

this.contentTableName = contentTableName;

// this.countTableName = countTableName;

this.headerNameId = headerNameId;

this.headerId = headerId;

}

public void setQueryParams(String methodName, Map<String, Object> params,

String fromRecordNumField, String toRecordNumField,

String contentTableName) {

this.methodName = methodName;

this.params = params;

this.fromRecordNumField = fromRecordNumField;

this.toRecordNumField = toRecordNumField;

this.contentTableName = contentTableName;

// this.countTableName = countTableName;

}

public void setQueryParams(String methodName, Map<String, Object> params,

String contentTableName, int headerNameId, int headerId) {

this.methodName = methodName;

this.params = params;

this.contentTableName = contentTableName;

this.headerNameId = headerNameId;

this.headerId = headerId;

}

public void setTitleCellWidth(List<Integer> columnWidths) {

this.columnWidths = columnWidths;

}

/*

* public int getCurrentPage(){ return currentPage; }

*/

private void findViews() {

totalPageNumText = (TextView) contextActivity

.findViewById(R.id.total_page_num);

totalRecordNumText = (TextView) contextActivity

.findViewById(R.id.total_record_num);

recordNumEachPageText = (TextView) contextActivity

.findViewById(R.id.record_num_each_page);

firstPage = (Button) contextActivity.findViewById(R.id.first_page);

pageDown = (Button) contextActivity.findViewById(R.id.page_down);

pageUp = (Button) contextActivity.findViewById(R.id.page_up);

lastPage = (Button) contextActivity.findViewById(R.id.last_page);

currentPageText = (EditText) contextActivity

.findViewById(R.id.current_page);

toPage = (Button) contextActivity.findViewById(R.id.to_page);

}

private void setOnClickListener() {

if (firstPage != null) {

firstPage.setOnClickListener(contextActivity);

}

if (pageDown != null) {

pageDown.setOnClickListener(contextActivity);

}

if (pageUp != null) {

pageUp.setOnClickListener(contextActivity);

}

if (lastPage != null) {

lastPage.setOnClickListener(contextActivity);

}

if (toPage != null) {

toPage.setOnClickListener(contextActivity);

}

}

private void getRecordNumEachPageText() {

try {

recordNumEachPage = Integer.parseInt(recordNumEachPageText

.getText().toString());

} catch (NumberFormatException e) {

Log.e("NumberFormatException", e.getMessage());

}

}

private boolean outOfEachPageRange() {

recordNumEachPage = Integer.parseInt(recordNumEachPageText.getText()

.toString());

if (recordNumEachPage > 20 || recordNumEachPage < 1) {

return true;

}

return false;

}

private void getTotalPageNumText() {

getRecordNumEachPageText();

if (recordNumEachPage == 0)

return;

if (totalRecord == 0) {

totalPage = 0;

totalPageNumText.setText(String.valueOf(0));

return;

}

if (totalRecord % recordNumEachPage == 0) {// java中分页常用到的计算公式

totalPage = totalRecord / recordNumEachPage;

} else {

totalPage = totalRecord / recordNumEachPage + 1;

}

totalPageNumText.setText(String.valueOf(totalPage));

}

public void pageDown() {

if (outOfEachPageRange()) {

AlertDialog.Builder dialog = new AlertDialog.Builder(

contextActivity);

dialog.setTitle("提示:").setMessage("每页显示条数在1~20之间!")

.setPositiveButton("确认", null).show();

return;

}

if (currentPage != totalPage) {

setCurrentPage(++currentPage);

getTotalPageNumText();

query(recordNumEachPage * (currentPage - 1) + 1, recordNumEachPage

* currentPage);

}

}

public void pageUp() {

if (outOfEachPageRange()) {

AlertDialog.Builder dialog = new AlertDialog.Builder(

contextActivity);

dialog.setTitle("提示:").setMessage("每页显示条数在1~20之间!")

.setPositiveButton("确认", null).show();

return;

}

if (currentPage != 1 && currentPage != 0) {

setCurrentPage(--currentPage);

getTotalPageNumText();

query(recordNumEachPage * (currentPage - 1) + 1, recordNumEachPage

* currentPage);

}

}

public void firstPage() {

if (outOfEachPageRange()) {

AlertDialog.Builder dialog = new AlertDialog.Builder(

contextActivity);

dialog.setTitle("提示:").setMessage("每页显示条数在1~20之间!")

.setPositiveButton("确认", null).show();

return;

}

getTotalPageNumText();

if (totalPage > 1) {

setCurrentPage(1);

query(1, recordNumEachPage);

}

}

public void lastPage() {

if (outOfEachPageRange()) {

AlertDialog.Builder dialog = new AlertDialog.Builder(

contextActivity);

dialog.setTitle("提示:").setMessage("每页显示条数在1~20之间!")

.setPositiveButton("确认", null).show();

return;

}

getTotalPageNumText();

if (totalPage != 1 && totalPage != 0) {

setCurrentPage(totalPage);

query(recordNumEachPage * (totalPage - 1) + 1, totalRecord);

}

}

public void toPage() {

if (outOfEachPageRange()) {

AlertDialog.Builder dialog = new AlertDialog.Builder(

contextActivity);

dialog.setTitle("提示:").setMessage("每页显示条数在1~20之间!")

.setPositiveButton("确认", null).show();

return;

}

try {

currentPage = Integer

.parseInt(currentPageText.getText().toString());

} catch (NumberFormatException e) {

Log.e("NumberFormatException", e.getMessage());

return;

}

getTotalPageNumText();

query(recordNumEachPage * (currentPage - 1) + 1, recordNumEachPage

* currentPage);

currentPageText.setText(String.valueOf(currentPage));

}

public List<List<String>> query(int fromRecordNum, int toRecordNum) {

return query(methodName, params, fromRecordNumField, toRecordNumField,

fromRecordNum, toRecordNum);

}

private List<List<String>> query(String methodName,

Map<String, Object> params, String fromRecordNumField,

String toRecordNumField, int fromRecordNum, int toRecordNum) {

params.put(fromRecordNumField, fromRecordNum);

params.put(toRecordNumField, toRecordNum);

return query(methodName, params);

}

public List<Map<String, Object>> getWholeResult() {

return wholeresult;

}

public List<Map<String, Object>> getResult() {

return wholeresult;

}

public List<Boolean> getCheckBoxState() {

return dataTableAdapter.getCheckBoxState();

}

public List<List<String>> query(String methodName,

Map<String, Object> params) {// 此方法要重点注意,因为这里是根据webservice查询到的数据,所以要传递来方法和参数

SoapObject result = null;

if (methodName == null) {

if (bSetTitleValue == false) {// 下面是实现listview的标题显示

bSetTitleValue = true;

myListViewTitle listViewTitle = new myListViewTitle(

contextActivity);

if (this.columnWidths != null) {

listViewTitle.setTitleCellWidth(this.columnWidths);

}

List<String> headerList = Arrays.asList(contextActivity

.getResources().getStringArray(headerId));

listViewTitle.setTitleCellValue(headerList);

}

return null;

}

try {

result = WSUtil.getSoapObjectByCallingWS(

// 这里是android调用webservice的典型方法

WebServiceConfig.NAMESPACE, methodName, params,

WebServiceConfig.wsdl);

} catch (Exception e) {

new AlertDialog.Builder(contextActivity)

.setTitle(R.string.message_title)

.setMessage(R.string.connection_error)

.setPositiveButton(R.string.OK_text, null).show();

Log.e("Exception", e.getMessage());

}

if (result == null) {// 如果从webservice得到的结果为null,那我们就找到listview,并赋空值,将分页的显示值设为0

ListView list = (ListView) contextActivity.findViewById(R.id.list);

list.setAdapter(null);

setTotalRecord(0);

this.setCurrentPage(0);

return null;

}

SoapObject dataSet = WSObjectUtil.getDataSetObject(result);// 如果从webservice得到的结果不为空,则转化成dataSet

if (dataSet == null) {// 如果dataSet为空,则显示对话框,没有查询到相关数据

new AlertDialog.Builder(contextActivity)

.setTitle(R.string.message_title).setMessage("没有查询到相关数据!")

.setPositiveButton(R.string.OK_text, null);

return null;

}

// 否则,就取得列名,并将取得的dataset转化成list型的数据,最后将数据显示在listview,并通过rows返回数据

List<String> columnNameList = Arrays.asList(contextActivity

.getResources().getStringArray(headerNameId));

WSObjectListUtil wsObjectListUtil = new WSObjectListUtil();

if (contentTableName != null) {

rows = wsObjectListUtil.getTableValueList(dataSet,

contentTableName, columnNameList);

} else {

rows = wsObjectListUtil.getTableValueList(dataSet, columnNameList);

}

if (wholeresult != null) {

wholeresult.clear();

}

WSObjectMapUtil wsObjectMapUtil = new WSObjectMapUtil();

if (contentTableName != null) {

wholeresult = wsObjectMapUtil.getRowMapList(contentTableName,

dataSet);

} else {

wholeresult = WSObjectMapUtil.getRowMapList(dataSet);

}

SoapObject countTable = (SoapObject) dataSet.getProperty(dataSet

.getPropertyCount() - 1);

try {

totalRecord = Integer

.parseInt(countTable.getProperty(0).toString());

} catch (Exception e) {

Log.e("Exception", e.getMessage());

}

if (totalRecord != 0 && this.totalRecord == 0

&& currentPageText != null) {

this.setCurrentPage(1);

}

setTotalRecord(totalRecord);

if (bSetTitleValue == false) {

bSetTitleValue = true;

myListViewTitle listViewTitle = new myListViewTitle(contextActivity);

if (this.columnWidths != null) {

listViewTitle.setTitleCellWidth(this.columnWidths);

}

List<String> headerList = Arrays.asList(contextActivity

.getResources().getStringArray(headerId));

listViewTitle.setTitleCellValue(headerList);

}

ListView list = (ListView) contextActivity.findViewById(R.id.list);

dataTableAdapter = new DataTableAdapter(contextActivity, rows);

if (bMarkable) {

dataTableAdapter.setMarkable(true);

}

if (this.columnWidths != null) {

dataTableAdapter.setColumnWidths(this.columnWidths);

}

list.setAdapter(dataTableAdapter);// 注意,关键点:将数据显示在listview

return rows;// 返回数据

}

}

到这里这个工具类基本就实现了。大家也可以自己添加一些元素完善。

赞助本站

人工智能实验室

相关热词: 分页 分页工具类

相关内容
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港