电脑在编译代码,无法开发,现在无事,写个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 关于数据库操作那里,我没有把创建 数据库&表 的具体代码贴出来,因为这不是重点,百度一下代码很多;