該項目中的資料通過ListView來呈現,並且通過手勢可以進行翻頁。具體步驟:
一、自訂ListView,增加手勢;
二、自訂Adapter,固定每頁顯示的條目數量;
三、編寫商務邏輯
通過一個Demo來觀察具體的實現:
一、自訂ListView
1、首先定義兩個介面,一個向前翻頁,一個向後翻頁:
public interface OnPrevPageListener { void onPrevPage(); }public interface OnNextPageListener { void onNextPage(); }
2、建立IListView類,繼承ListView,並註冊這兩個介面:
public void setPervPageListener(OnPrevPageListener pervPageListener) {this.pervPageListener = pervPageListener;}public void setNextPageListener(OnNextPageListener nextPageListener) {this.nextPageListener = nextPageListener;}
3、重寫performItemClick和onTouchEvent方法,確定手勢的軌跡:
@Overridepublic 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); }} @Overridepublic boolean onTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_MOVE && event.getHistorySize() > mTouchSize) {mTouchSize = event.getHistorySize();}mDetector.onTouchEvent(event);return super.onTouchEvent(event);}
4、增加手勢:
private class IGestureListener extends SimpleOnGestureListener{@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) { if (e1.getX() - e2.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity) { if(nextPageListener!=null){ nextPageListener.onNextPage(); IListView.this.startAnimation(nextanim); } } else if (e2.getX() - e1.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity) { if(pervPageListener!=null){ pervPageListener.onPrevPage(); IListView.this.startAnimation(pervanim); } }return false;}}
二、自訂Adapter
因為Demo對資料沒什麼監聽要求,所以Adapter很簡單,只是規定了每個頁面返回的記錄條數。
static int pageCount = 10;@Overridepublic int getCount() {// TODO Auto-generated method stubreturn pageCount;//備忘4}
其中的產生view的方法:
@Overridepublic 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());//備忘3TextView listvalue = (TextView)convertView.findViewById(ids[1]);listvalue.setText(data.get(position+(FlipListDemo.pageid-1)*pageCount).get(strs[1]).toString());return convertView;}
三、商務邏輯的實現
iList.setPervPageListener(new OnPrevPageListener() {public void onPrevPage() {if(pageid>1){pageid--;initData();}}});iList.setNextPageListener(new OnNextPageListener() {public void onNextPage() {if(pageid<10){pageid++;//備忘1initData();}}});
其中資料載入方法initData():
private void initData() {for (int i = (pageid-1)*10; i < pageid*10; i++) {//備忘2HashMap<String,String> map = new HashMap<String,String>();map.put("id", i+"");map.put("value", "i want "+i);list.add(map);}page.setText(pageid+"");adapter.notifyDataSetChanged();}
可以看出商務邏輯實現的順序:
1、備忘1,當我們要翻到下一頁,這裡的pageid便會加1,。
2、備忘2,因為pageid自加了1,於是這裡的for迴圈得到的資料變為10-19,為第二頁的資料。
3、備忘3,因為備忘2的方法中的adapter更新,於是這裡的一些值將會被重新賦新值,即相應的頁面對應的條數。
4、備忘4,當備忘3的值賦好後,這裡規定產生10條記錄。
至此,新的一頁便產生了,往前是一樣的邏輯。
最後奉上Demo代碼:http://download.csdn.net/detail/duancanmeng/4096458