viewpager 分页请求数据库并展示
来源:互联网 发布:演员张译 知乎 编辑:程序博客网 时间:2024/04/27 22:11
电脑在编译代码,无法开发,现在无事,写个demo玩一下,本人技术拙劣(看我代码应该能看出来),各位勿笑,这demo可能对一些朋友有用。
功能:分页展示数据库里面预先存储的数据,可以翻页
0.=======效果========
1.=======Activity======
public class TestActivity extends BaseActivity implements ViewPager.OnPageChangeListener, View.OnClickListener { public final static int TEST_PAGE_SIZE = 10; protected static final String TAG = "TestActivity"; private ViewPager viewPager; private ArrayList<TestBean> list; private DataAdapter adapter; private Button laseBt, nextBt; private PopupWindow popupWindow; private boolean requestNewPage = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); init(); } /*not use*/ private void getPopupWindowInstance() { if (null != popupWindow) { popupWindow.dismiss(); return; } else { initPopuptWindow(); } } /*not use*/ private void initPopuptWindow() { LayoutInflater layoutInflater = LayoutInflater.from(TestActivity.this); View popupWindowView = LayoutInflater.from(TestActivity.this).inflate(R.layout.item_test, null); // 创建一个PopupWindow // 参数1:contentView 指定PopupWindow的内容 // 参数2:width 指定PopupWindow的width // 参数3:height 指定PopupWindow的height popupWindow = new PopupWindow(popupWindowView, 500, 430, true); popupWindow.setBackgroundDrawable((getResources().getDrawable(R.drawable .collection_star))); } private void init() { list = new ArrayList<TestBean>(); //建立数据库,插入数据,第一运行程序的时候执行,之后注释掉以后再次编译&运行程序 //initDataBaseTestTable(); laseBt = (Button) findViewById(R.id.last); nextBt = (Button) findViewById(R.id.next); laseBt.setOnClickListener(this); nextBt.setOnClickListener(this); viewPager = (ViewPager) findViewById(R.id.testPager); viewPager.setOnPageChangeListener(this); adapter = new DataAdapter(this); viewPager.setAdapter(adapter); new Task().execute(0); } private void initDataBaseTestTable() { new Thread() { @Override public void run() { super.run(); insertData(); } }.start(); } //参见 后面第四条 private void insertData() { for (int i = 0; i < 100; i++) { FoodHelper.getInstance().addTestBean(new TestBean(i, "name is " + String.valueOf(i), "number is " + String.valueOf (i))); } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { //Log.d("debug", "onPageScrolled position=" + position); } @Override public void onPageSelected(int position) { //Log.d("debug", "onPageSelected position=" + position); } @Override public void onPageScrollStateChanged(int state) { //Log.d("debug", "onPageScrollStateChanged state=" + state); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.last: lastPage(); break; case R.id.next: nextPage(); break; default: break; } } private void lastPage() { if (viewPager.getCurrentItem() > 0) { adapter.notifyDataSetChanged(); viewPager.setCurrentItem(viewPager.getCurrentItem() - 1); } } private void nextPage() { Log.d("debug", "nextPage() adapter.getCount()=" + adapter.getCount() + "--viewPager.getCurrentItem" + "()=" + viewPager.getCurrentItem()); if (viewPager.getCurrentItem() == adapter.getCount() - 1) { requestNewPage = true; new Task().execute(viewPager.getCurrentItem() + 1); } else { viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); } } public class Task extends AsyncTask<Integer, ArrayList<TestBean>, ArrayList<TestBean>> { @Override protected void onPostExecute(ArrayList<TestBean> result) { super.onPostExecute(result); Log.d("debug", "onPostExecute adapter.getCount()=" + adapter.getCount()); if (list != null) { adapter.setData(list); adapter.notifyDataSetChanged(); } if (requestNewPage) { if (result != null && result.size() > 0) { viewPager.setCurrentItem(adapter.getCount() - 1); } } else { viewPager.setCurrentItem(0); } } @Override protected void onPreExecute() { super.onPreExecute(); } public Task() { super(); } @Override protected ArrayList<TestBean> doInBackground(Integer... params) { int pageIndex = params[0]; Log.d("debug", "doInBackground pageIndex=" + pageIndex); ArrayList<TestBean> newList = FoodHelper.getInstance().getTestTableDataLimitList(TEST_PAGE_SIZE * pageIndex, TEST_PAGE_SIZE); Log.d("debug", "doInBackground newList=" + new Gson().toJson(newList)); list.addAll(newList); Log.d("debug", "doInBackground list=" + new Gson().toJson(list)); return newList; } }}2.========viewpager的Adapter========
/** * Created by buxiaohui on 8/17/15. */public class DataAdapter extends PagerAdapter { private Context context; private ArrayList<TestBean> dataList; public DataAdapter(Context context) { this.context = context; } public void setData(ArrayList<TestBean> dataList) { this.dataList = dataList; } @Override public Object instantiateItem(ViewGroup container, int position) { Log.d("debug", "position=" + position); ViewGroup view = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.layout_listview, null); ListView listView = (ListView) view.findViewById(R.id.listview); int start = position * TestActivity.TEST_PAGE_SIZE; int stop = start + TestActivity.TEST_PAGE_SIZE ; Log.d("debug", "start=" + start+"--stop="+stop+"--dataList.size()="+dataList.size()); if(stop>=dataList.size()){ stop = dataList.size(); } ArrayList<TestBean> sub = new ArrayList<TestBean>(dataList.subList(start, stop)); listView.setAdapter(new ListAdapter(context, sub)); container.addView(view); return view; } @Override public int getCount() { if(dataList==null){ return 0; } if (dataList.size() % TestActivity.TEST_PAGE_SIZE != 0) { return dataList.size() / TestActivity.TEST_PAGE_SIZE + 1; } return dataList.size() / TestActivity.TEST_PAGE_SIZE; } @Override public boolean isViewFromObject(View view, Object object) { return view == ((View) object); } @Override public void destroyItem(ViewGroup container, int position, Object object) {// super.destroyItem(container, position, object); Log.d("debug", "destroyItem position=" + position); container.removeView((View) object); }}
3.=======listview的adapter=======
/** * Created by buxiaohui on 8/17/15. */public class ListAdapter extends BaseAdapter { private ArrayList<TestBean> dataList; private Context context; public ListAdapter(Context context) { super(); this.context = context; } public ListAdapter(Context context,ArrayList<TestBean> dataList) { super(); this.dataList = dataList; this.context = context; } public void setObject(ArrayList<TestBean> dataList) { this.dataList = dataList; } public ArrayList<TestBean> getObject() { return dataList; } @Override public int getCount() { return dataList != null ? dataList.size() : 0; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { viewHolder = new ViewHolder(); convertView= LayoutInflater.from(AppUtils.GlobleContext).inflate(R.layout.item_test, null); viewHolder.id = (TextView) convertView.findViewById(R.id.id); viewHolder.name = (TextView) convertView.findViewById(R.id.name); viewHolder.number = (TextView) convertView.findViewById(R.id.number); convertView.setTag(viewHolder); } viewHolder = (ViewHolder) convertView.getTag(); if (dataList != null && dataList.get(position) != null) { viewHolder.id.setText(String.valueOf(dataList.get(position).getId())); viewHolder.name.setText(dataList.get(position).getName()); viewHolder.number.setText(dataList.get(position).getNumber()); } return convertView; } private class ViewHolder { TextView id, name, number; }}4======数据库操作======
4.1 读取表
public ArrayList<TestBean> getTestTableDataLimitList(int index,int offset) { Log.d("debug", "FoodHelper getCategoryChildList <span style="font-family: Arial, Helvetica, sans-serif;">index</span><span style="font-family: Arial, Helvetica, sans-serif;">="+index+"--</span><span style="font-family: Arial, Helvetica, sans-serif;">offset</span><span style="font-family: Arial, Helvetica, sans-serif;">="+offset);</span> SQLiteDatabase db = mDatabase.getWritableDatabase(); ArrayList<TestBean> testBeansList = new ArrayList<TestBean>(); db.beginTransaction(); //Cursor cursor = query(TestTable.TABLE_NAME, null, null, null, null); String sql = "select * from test_table limit ?,?"; Cursor cursor = db.rawQuery( sql, new String[] { String.valueOf(index), String.valueOf(offset) }); try { Log.d("debug", "cursor.getCount() =" + cursor.getCount()); while (cursor != null && cursor.moveToNext()) { //chaild parentId TestBean testBean = new TestBean(); if (cursor.getColumnIndex(TestTable.COLUMN_ID) != -1) { testBean.setId(Integer.parseInt(cursor.getString(cursor.getColumnIndex(TestTable .COLUMN_ID)))); } if (cursor.getColumnIndex(TestTable.COLUMN_NAME) != -1) { testBean.setName(cursor.getString(cursor.getColumnIndex(TestTable .COLUMN_NAME))); } if (cursor.getColumnIndex(TestTable.COLUMN_NUMBER) != -1) { testBean.setNumber(cursor.getString(cursor.getColumnIndex(TestTable .COLUMN_NUMBER))); } testBeansList.add(testBean); } } finally { db.endTransaction(); if (cursor != null) { cursor.close(); } } Log.d("debug", "getTestTableDataLimitList testBeansList=" + new Gson().toJson(testBeansList)); return testBeansList; }4.1 插入数据
public long addTestBean(final TestBean testBean) { SQLiteDatabase helper = mDatabase.getWritableDatabase(); Cursor cursor = query(TestTable.TABLE_NAME, new String[]{TestTable._ID}, TestTable.getIdentifierWhereString(), new String[]{String.valueOf(testBean.getId())}); Log.d(TAG, "addCollectionData cursor=" + cursor); try { if ((cursor != null && cursor.moveToNext())) { Log.d(TAG, "add data error : already exists"); return -1; } ContentValues cv = new ContentValues(); cv.put(TestTable.COLUMN_ID, testBean.getId()); cv.put(TestTable.COLUMN_NAME, testBean.getName()); cv.put(TestTable.COLUMN_NUMBER, testBean.getNumber()); return helper.insert(TestTable.TABLE_NAME, null, cv); } finally { if (cursor != null) { cursor.close(); } } }
5.=====其他====
5.1 布局文件十分简单,主界面上面两个button,下面一个viewpager,viewpager里的view 是个listview,这个是动态添加的,listview的item 里面是几个textview;
5.2 关于数据库操作那里,我没有把创建 数据库&表 的具体代码贴出来,因为这不是重点,百度一下代码很多;
0 1
- viewpager 分页请求数据库并展示
- 用django将数据从数据库提出并分页展示
- django查询mysql数据 从数据库提出并分页展示
- thinkphp 数据库内容分页展示
- 数据库信息前台分页展示
- linq查询集合并分页展示数据
- Ajax 请求返回 html 页面并展示
- OkHttp请求网络数据,并listview展示
- 网络请求并展示到ListView上
- 读取数据库数据——分页展示
- 网络请求+ListView展示数据+数据库
- jsp通过URL跨站请求一个图片并展示
- 使用ajax异步请求数据,并展示在html中
- listview网络请求数据并实现多条目展示
- OkHttp+RecyclerView,利用OkHttp请求数据,并RecyclerView展示
- Listview,顶部加viewpager,并且带有上拉刷新和下拉分页功能的展示
- ViewPager网络请求图片并无限轮播
- ViewPager网络请求图片并无限轮播
- 自己平时长期积累的java资料可供大家学习
- 数据库读写分离和垂直分库、水平分表
- Windows环境下教你用Eclipse ADT 插件生成.h/.so文件,Java下调用JNI,轻松学习JNI
- Mac下安装from matplotlib import pyplot或者 import matplotlib.pyplot as plt报错
- UVA442矩阵乘法之求出多个矩阵相乘乘法的次数
- viewpager 分页请求数据库并展示
- PAT 1047. Student List for Course (25)
- 九度OJ 题目1066:字符串排序
- 拥抱生命……
- HDU-1863 畅通工程(最小生成树[Prim])
- CSS布局之水平垂直居中
- 深入掌握JMS(一):JSM基础
- Spring中Quartz的配置
- lsof简介