viewpager 分页请求数据库并展示

电脑在编译代码,无法开发,现在无事,写个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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值