android带分页功能的表格,Android提高之SQLite分页表格

srcTable = new ArrayList>();

saTable = new SimpleAdapter(context,

srcTable,// 数据来源

R.layout.items,//XML实现

new String[] { "ItemText" },// 动态数组与ImageItem对应的子项

new int[] { R.id.ItemText });

// 添加并且显示

gvTable.setAdapter(saTable);

gvTable.setOnItemClickListener(new OnItemClickListener(){

@Override

public void onItemClick(AdapterView> arg0, View arg1, int arg2,

long arg3) {

int y=arg2/curTable.getColumnCount()-1;//标题栏的不算

int x=arg2 % curTable.getColumnCount();

if (clickListener != null//分页数据被点击

&& y!=-1) {//点中的不是标题栏时

clickListener.onTableClickListener(x,y,curTable);

}

}

});

//----------------------------------------

gvPage=new GridView(context);

gvPage.setColumnWidth(40);//设置每个分页按钮的宽度

gvPage.setNumColumns(GridView.AUTO_FIT);//分页按钮数量自动设置

addView(gvPage, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,

LayoutParams.WRAP_CONTENT));//宽长式样

srcPageID = new ArrayList>();

saPageID = new SimpleAdapter(context,

srcPageID,// 数据来源

R.layout.items,//XML实现

new String[] { "ItemText" },// 动态数组与ImageItem对应的子项

new int[] { R.id.ItemText });

// 添加并且显示

gvPage.setAdapter(saPageID);

// 添加消息处理

gvPage.setOnItemClickListener(new OnItemClickListener(){

@Override

public void onItemClick(AdapterView> arg0, View arg1, int arg2,

long arg3) {

LoadTable(arg2);//根据所选分页读取对应的数据

if(switchListener!=null){//分页切换时

switchListener.onPageSwitchListener(arg2,srcPageID.size());

}

}

});

}

/**

* 清除所有数据

*/

public void gvRemoveAll()

{

if(this.curTable!=null)

curTable.close();

srcTable.clear();

saTable.notifyDataSetChanged();

srcPageID.clear();

saPageID.notifyDataSetChanged();

}

/**

* 读取指定ID的分页数据,返回当前页的总数据

* SQL:Select * From TABLE_NAME Limit 9 Offset 10;

* 表示从TABLE_NAME表获取数据,跳过10行,取9行

* @param pageID 指定的分页ID

*/

protected void LoadTable(int pageID)

{

if(curTable!=null)//释放上次的数据

curTable.close();

String sql= rawSQL+" Limit "+String.valueOf(TableRowCount)+ " Offset " +String.valueOf(pageID*TableRowCount);

curTable = db.rawQuery(sql, null);

gvTable.setNumColumns(curTable.getColumnCount());//表现为表格的关键点!

TableColCount=curTable.getColumnCount();

srcTable.clear();

// 取得字段名称

int colCount = curTable.getColumnCount();

for (int i = 0; i < colCount; i++) {

HashMap map = new HashMap();

map.put("ItemText", curTable.getColumnName(i));

srcTable.add(map);

}

// 列举出所有数据

int recCount=curTable.getCount();

for (int i = 0; i < recCount; i++) {//定位到一条数据

curTable.moveToPosition(i);

for(int ii=0;ii

{

HashMap map = new HashMap();

map.put("ItemText", curTable.getString(ii));

srcTable.add(map);

}

}

saTable.notifyDataSetChanged();

}

/**

* 设置表格的最多显示的行数

* @param row 表格的行数

*/

public void gvSetTableRowCount(int row)

{

TableRowCount=row;

}

/**

* 取得表格的最大行数

* @return 行数

*/

public int gvGetTableRowCount()

{

return TableRowCount;

}

/**

* 取得当前分页的Cursor

* @return 当前分页的Cursor

*/

public Cursor gvGetCurrentTable()

{

return curTable;

}

/**

* 准备分页显示数据

* @param rawSQL sql语句

* @param db 数据库

*/

public void gvReadyTable(String rawSQL,SQLiteDatabase db)

{

this.rawSQL=rawSQL;

this.db=db;

}

/**

* 刷新分页栏,更新按钮数量

* @param sql SQL语句

* @param db 数据库

*/

public void gvUpdatePageBar(String sql,SQLiteDatabase db)

{

Cursor rec = db.rawQuery(sql, null);

rec.moveToLast();

long recSize=rec.getLong(0);//取得总数

rec.close();

int pageNum=(int)(recSize/TableRowCount) + 1;//取得分页数

srcPageID.clear();

for (int i = 0; i < pageNum; i++) {

HashMap map = new HashMap();

map.put("ItemText", "No." + String.valueOf(i));// 添加图像资源的ID

srcPageID.add(map);

}

saPageID.notifyDataSetChanged();

}

//---------------------------------------------------------

/**

* 表格被点击时的回调函数

*/

public void setTableOnClickListener(OnTableClickListener click) {

this.clickListener = click;

}

public interface OnTableClickListener {

public void onTableClickListener(int x,int y,Cursor c);

}

//---------------------------------------------------------

/**

* 分页栏被点击时的回调函数

*/

public void setOnPageSwitchListener(OnPageSwitchListener pageSwitch) {

this.switchListener = pageSwitch;

}

public interface OnPageSwitchListener {

public void onPageSwitchListener(int pageID,int pageCount);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值