Android項目技術總結:主介面中ListView裝載資料並結合手勢進行翻頁

來源:互聯網
上載者:User

該項目中的資料通過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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.