Android提高第六篇之SQLite分页表格.docx

上传人:b****6 文档编号:8621424 上传时间:2023-02-01 格式:DOCX 页数:11 大小:18KB
下载 相关 举报
Android提高第六篇之SQLite分页表格.docx_第1页
第1页 / 共11页
Android提高第六篇之SQLite分页表格.docx_第2页
第2页 / 共11页
Android提高第六篇之SQLite分页表格.docx_第3页
第3页 / 共11页
Android提高第六篇之SQLite分页表格.docx_第4页
第4页 / 共11页
Android提高第六篇之SQLite分页表格.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

Android提高第六篇之SQLite分页表格.docx

《Android提高第六篇之SQLite分页表格.docx》由会员分享,可在线阅读,更多相关《Android提高第六篇之SQLite分页表格.docx(11页珍藏版)》请在冰豆网上搜索。

Android提高第六篇之SQLite分页表格.docx

Android提高第六篇之SQLite分页表格

Android提高第六篇之SQLite分页表格——维信科技

实现并封装一个SQL分页表格控件,不仅支持分页还是以表格的形式展示数据(维信科技提供)。

这个SQL分页表格控件主要分为“表格区”和“分页栏”这两部分,这两部分都是基于GridView实现的。

网上介绍Android上实现表格的DEMO一般都用ListView。

ListView与GridView对比,ListView最大的优势是格单元的大小可以自定义,可以某单元长某单元短,但是难于实现自适应数据表的结构;而GridView最大的优势就是自适应数据表的结构,但是格单元统一大小。

对于数据表结构多变的情况,建议使用GridView实现表格(维信科技提供)。

1.自适应数据表结构,但是格单元统一大小;

2.支持分页;

3.“表格区”有按键事件回调处理,“分页栏”有分页切换事件回调处理。

packagecom.testSQLite;

importandroid.app.Activity;

importandroid.database.Cursor;

importandroid.database.SQLException;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.view.View;

importandroid.widget.Button;

importandroid.widget.LinearLayout;

importandroid.widget.Toast;

publicclasstestSQLiteextendsActivity{

GVTabletable;

ButtonbtnCreateDB,btnInsert,btnClose;

SQLiteDatabasedb;

intid;//添加记录时的id累加标记,必须全局

privatestaticfinalStringTABLE_NAME="stu";

privatestaticfinalStringID="id";

privatestaticfinalStringNAME="name";

privatestaticfinalStringPHONE="phone";

privatestaticfinalStringADDRESS="address";

privatestaticfinalStringAGE="age";

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

btnCreateDB=(Button)this.findViewById(R.id.btnCreateDB);

btnCreateDB.setOnClickListener(newClickEvent());

btnInsert=(Button)this.findViewById(R.id.btnInsertRec);

btnInsert.setOnClickListener(newClickEvent());

btnClose=(Button)this.findViewById(R.id.btnClose);

btnClose.setOnClickListener(newClickEvent());

table=newGVTable(this);

table.gvSetTableRowCount(8);//设置每个分页的ROW总数

LinearLayoutly=(LinearLayout)findViewById(R.id.MainLinearLayout);

table.setTableOnClickListener(newGVTable.OnTableClickListener(){

@Override

publicvoidonTableClickListener(intx,inty,Cursorc){

c.moveToPosition(y);

Stringstr=c.getString(x)+"位置:

("+String.valueOf(x)+","+String.valueOf(y)+")";

Toast.makeText(testSQLite.this,str,1000).show();

}

};

table.setOnPageSwitchListener(newGVTable.OnPageSwitchListener(){

@Override

publicvoidonPageSwitchListener(intpageID,intpageCount){

Stringstr="共有"+String.valueOf(pageCount)+

"当前第"+String.valueOf(pageID)+"页";

Toast.makeText(testSQLite.this,str,1000).show();

}

};

ly.addView(table);

}

classClickEventimplementsView.OnClickListener{

@Override

publicvoidonClick(Viewv){

if(v==btnCreateDB){

CreateDB();

}elseif(v==btnInsert){

InsertRecord(16);//插入16条记录

table.gvUpdatePageBar("selectcount(*)from"+TABLE_NAME,db);

table.gvReadyTable("select*from"+TABLE_NAME,db);

}elseif(v==btnClose){

table.gvRemoveAll();

db.close();

}

}

}

/**

*在内存创建数据库和数据表

*/

voidCreateDB(){

//在内存创建数据库

db=SQLiteDatabase.create(null);

Log.e("DBPath",db.getPath());

Stringamount=String.valueOf(databaseList().length);

Log.e("DBamount",amount);

//创建数据表

Stringsql="CREATETABLE"+TABLE_NAME+"("+

ID+"textnotnull,"+NAME+"textnotnull,"+

ADDRESS+"textnotnull,"+PHONE+"textnotnull,"+

AGE+"textnotnull"+");";

try{

db.execSQL("DROPTABLEIFEXISTS"+TABLE_NAME);

db.execSQL(sql);

}catch(SQLExceptione){}

}

/**

*插入N条数据

*/

voidInsertRecord(intn){

inttotal=id+n;

for(;id

Stringsql="insertinto"+TABLE_NAME+"("+

ID+","+NAME+","+ADDRESS+","+PHONE+","+AGE

+")values('"+String.valueOf(id)+"','man','address','123456789','18');";

try{

db.execSQL(sql);

}catch(SQLExceptione){

}

}

}

}

packagecom.testSQLite;

importjava.util.ArrayList;

importjava.util.HashMap;

importandroid.content.Context;

importandroid.database.Cursor;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.view.View;

importandroid.widget.AdapterView;

importandroid.widget.GridView;

importandroid.widget.LinearLayout;

importandroid.widget.SimpleAdapter;

importandroid.widget.AdapterView.OnItemClickListener;

publicclassGVTableextendsLinearLayout{

protectedGridViewgvTable,gvPage;

protectedSimpleAdaptersaPageID,saTable;//适配器

protectedArrayList>srcPageID,srcTable;//数据源

protectedintTableRowCount=10;//分页时,每页的Row总数

protectedintTableColCount=0;//每页col的数量

protectedSQLiteDatabasedb;

protectedStringrawSQL="";

protectedCursorcurTable;//分页时使用的Cursor

protectedOnTableClickListenerclickListener;//整个分页控件被点击时的回调函数

protectedOnPageSwitchListenerswitchListener;//分页切换时的回调函数

publicGVTable(Contextcontext){

super(context);

this.setOrientation(VERTICAL);//垂直

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

gvTable=newGridView(context);

addView(gvTable,newLinearLayout.LayoutParams(LayoutParams.FILL_PARENT,

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

srcTable=newArrayList>();

saTable=newSimpleAdapter(context,

srcTable,//数据来源

R.layout.items,//XML实现

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

newint[]{R.id.ItemText});

//添加并且显示

gvTable.setAdapter(saTable);

gvTable.setOnItemClickListener(newOnItemClickListener(){

@Override

publicvoidonItemClick(AdapterView

>arg0,Viewarg1,intarg2,

longarg3){

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

intx=arg2%curTable.getColumnCount();

if(clickListener!

=null//分页数据被点击

&&y!

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

clickListener.onTableClickListener(x,y,curTable);

}

}

});

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

gvPage=newGridView(context);

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

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

addView(gvPage,newLinearLayout.LayoutParams(LayoutParams.FILL_PARENT,

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

srcPageID=newArrayList>();

saPageID=newSimpleAdapter(context,

srcPageID,//数据来源

R.layout.items,//XML实现

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

newint[]{R.id.ItemText});

//添加并且显示

gvPage.setAdapter(saPageID);

//添加消息处理

gvPage.setOnItemClickListener(newOnItemClickListener(){

@Override

publicvoidonItemClick(AdapterView

>arg0,Viewarg1,intarg2,

longarg3){

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

if(switchListener!

=null){//分页切换时

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

}

}

});

}

/**

*清除所有数据

*/

publicvoidgvRemoveAll()

{

if(this.curTable!

=null)

curTable.close();

srcTable.clear();

saTable.notifyDataSetChanged();

srcPageID.clear();

saPageID.notifyDataSetChanged();

}

/**

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

*SQL:

Select*FromTABLE_NAMELimit9Offset10;

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

*@parampageID指定的分页ID

*/

protectedvoidLoadTable(intpageID)

{

if(curTable!

=null)//释放上次的数据

curTable.close();

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

curTable=db.rawQuery(sql,null);

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

TableColCount=curTable.getColumnCount();

srcTable.clear();

//取得字段名称

intcolCount=curTable.getColumnCount();

for(inti=0;i

HashMapmap=newHashMap();

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

srcTable.add(map);

}

//列举出所有数据

intrecCount=curTable.getCount();

for(inti=0;i

curTable.moveToPosition(i);

for(intii=0;ii

{

HashMapmap=newHashMap();

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

srcTable.add(map);

}

}

saTable.notifyDataSetChanged();

}

/**

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

*@paramrow表格的行数

*/

publicvoidgvSetTableRowCount(introw)

{

TableRowCount=row;

}

/**

*取得表格的最大行数

*@return行数

*/

publicintgvGetTableRowCount()

{

returnTableRowCount;

}

/**

*取得当前分页的Cursor

*@return当前分页的Cursor

*/

publicCursorgvGetCurrentTable()

{

returncurTable;

}

/**

*准备分页显示数据

*@paramrawSQLsql语句

*@paramdb数据库

*/

publicvoidgvReadyTable(StringrawSQL,SQLiteDatabasedb)

{

this.rawSQL=rawSQL;

this.db=db;

}

/**

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

*@paramsqlSQL语句

*@paramdb数据库

*/

publicvoidgvUpdatePageBar(Stringsql,SQLiteDatabasedb)

{

Cursorrec=db.rawQuery(sql,null);

rec.moveToLast();

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

rec.close();

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

srcPageID.clear();

for(inti=0;i

HashMapmap=newHashMap();

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

srcPageID.add(map);

}

saPageID.notifyDataSetChanged();

}

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

/**

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

*/

publicvoidsetTableOnClickListener(OnTableClickListenerclick){

this.clickListener=click;

}

publicinterfaceOnTableClickListener{

publicvoidonTableClickListener(intx,inty,Cursorc);

}

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

/**

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

*/

publicvoidsetOnPageSwitchListener(OnPageSwitchListenerpageSwitch){

this.switchListener=pageSwitch;

}

publicinterfaceOnPageSwitchListener{

publicvoidonPageSwitchListener(intpageID,intpageCount);

}

}

(维信科技提供)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1