该项目中的数据通过ListView来呈现,并且通过手势可以进行翻页。具体步骤:
一、自定义ListView,增加手势;
二、自定义Adapter,固定每页显示的条目数量;
三、编写业务逻辑
通过一个Demo来观察具体的实现:
一、自定义ListView
1、首先定义两个接口,一个向前翻页,一个向后翻页:
public interface OnPrevPageListener { void onPrevPage(); } public interface OnNextPageListener { void onNextPage(); }
2、新建IListView类,继承ListView,并注册这两个接口:
3、重写performItemClick和onTouchEvent方法,确定手势的轨迹:
@Override public boolean performItemClick(View view, int position, long id) { int m=mTouchSize; mTouchSize=0; if(m > MAXTouchSize){ return true; }else{ return super.performItemClick(view, position, id); } } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_MOVE && event.getHistorySize() > mTouchSize) { mTouchSize = event.getHistorySize(); } mDetector.onTouchEvent(event); return super.onTouchEvent(event); }
4、增加手势:
二、自定义Adapter
因为Demo对数据没什么监听要求,所以Adapter很简单,只是规定了每个页面返回的记录条数。
static int pageCount = 10; @Override public int getCount() { // TODO Auto-generated method stub return pageCount; //备注4 }其中的生成view的方法:
@Override public View getView(int position, View convertView, ViewGroup parent) { convertView = (LinearLayout) inflater.inflate(layoutId, null); TextView listid = (TextView)convertView.findViewById(ids[0]); listid.setText(data.get(position+(FlipListDemo.pageid-1)*pageCount).get(strs[0]).toString()); //备注3 TextView listvalue = (TextView)convertView.findViewById(ids[1]); listvalue.setText(data.get(position+(FlipListDemo.pageid-1)*pageCount).get(strs[1]).toString()); return convertView; }
三、业务逻辑的实现
其中数据加载方法initData():
可以看出业务逻辑实现的顺序:
1、备注1,当我们要翻到下一页,这里的pageid便会加1,。
2、备注2,因为pageid自加了1,于是这里的for循环得到的数据变为10-19,为第二页的数据。
3、备注3,因为备注2的方法中的adapter更新,于是这里的一些值将会被重新赋新值,即相应的页面对应的条数。
4、备注4,当备注3的值赋好后,这里规定生成10条记录。
至此,新的一页便产生了,往前是一样的逻辑。
最后奉上Demo代码:http://download.youkuaiyun.com/detail/duancanmeng/4096458