Android实现基于滑动的SQLite数据分页加载技术(附demo源码下载)
本文实例讲述了Android实现基于滑动的SQLite数据分页加载技术。分享给大家供大家参考,具体如下:
main.xml如下:
<menuxmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="never" android:title="@string/action_settings"/> </menu>
MainActivity.java如下:
packagecom.example.testscrollsqlite; importjava.util.ArrayList; importandroid.app.ActionBar.LayoutParams; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.Gravity; importandroid.view.Menu; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.AbsListView; importandroid.widget.AbsListView.OnScrollListener; importandroid.widget.Adapter; importandroid.widget.BaseAdapter; importandroid.widget.LinearLayout; importandroid.widget.ListView; importandroid.widget.TextView; publicclassMainActivityextendsActivityimplementsOnScrollListener{ privateTextViewloadInfo; privateListViewlistView; privateLinearLayoutloadLayout; privateArrayList<String>items; privateDatabaseServiceservice; privateintcurrentPage=1;//默认在第一页 privatestaticfinalintlineSize=7;//每次显示数 privateintallRecorders=0;//全部记录数 privateintpageSize=1;//默认共一页 privateintlastItem; privateAleph0baseAdapter; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView=(ListView)findViewById(R.id.listview); //创建一个角标线性布局用来显示"正在加载" loadLayout=newLinearLayout(this); loadLayout.setGravity(Gravity.CENTER); //定义一个文本显示“正在加载” loadInfo=newTextView(this); loadInfo.setText("正在加载..."); loadInfo.setGravity(Gravity.CENTER); //增加组件 loadLayout.addView(loadInfo,newLayoutParams( LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT)); //增加到listView底部 listView.addFooterView(loadLayout); listView.setOnScrollListener(this); showAllData(); } /** *读取全部数据 */ publicvoidshowAllData(){ service=newDatabaseService(this); allRecorders=service.getCount(); //计算总页数 pageSize=(allRecorders+lineSize-1)/lineSize; System.out.println("allRecorders="+allRecorders); System.out.println("pageSize="+pageSize); items=service.getAllItems(currentPage,lineSize); for(inti=0;i<items.size();i++){ System.out.println(items.get(i)); } baseAdapter=newAleph0(); listView.setAdapter(baseAdapter); } @Override publicvoidonScroll(AbsListViewview,intfirstVisible,intvisibleCount, inttotalCount){ lastItem=firstVisible+visibleCount-1;//统计是否到最后 } @Override publicvoidonScrollStateChanged(AbsListViewview,intscorllState){ System.out.println("进入滚动界面了"); //是否到最底部并且数据没读完 if(lastItem==baseAdapter.getCount() &¤tPage<pageSize//不再滚动 &&scorllState==OnScrollListener.SCROLL_STATE_IDLE){ currentPage++; //设置显示位置 listView.setSelection(lastItem); //增加数据 appendDate(); } } /** *增加数据 */ privatevoidappendDate(){ ArrayList<String>additems=service.getAllItems(currentPage,lineSize); baseAdapter.setCount(baseAdapter.getCount()+additems.size()); //判断,如果到了最末尾则去掉“正在加载” if(allRecorders==baseAdapter.getCount()){ listView.removeFooterView(loadLayout); } items.addAll(additems); //通知记录改变 baseAdapter.notifyDataSetChanged(); } classAleph0extendsBaseAdapter{ intcount=lineSize;/*startingamount*/ publicintgetCount(){ returncount; } publicvoidsetCount(intcount){ this.count=count; } publicObjectgetItem(intpos){ returnpos; } publiclonggetItemId(intpos){ returnpos; } publicViewgetView(intpos,Viewv,ViewGroupp){ TextViewview=newTextView(MainActivity.this); view.setTextSize(60); if(items!=null){ view.setText(items.get(pos)); }else{ view.setText(pos); } returnview; } } }
完整实例代码点击此处本站下载。
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。