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
原创粉丝点击