天天看點

Android listView item側滑實作删除和置頂功能

         第一次寫部落格,先說下大概思路吧~

        要顯示item側滑顯示删除,置頂。首先要隐藏一部分item的布局(自定義隐藏布局寬度,在adapter裡設定LayoutParams)。然後重寫listview的onInterceptTouchEvent()和onTouchEvent()方法,然後對listview的滑動進行判斷,最後進行相應的操作(删除啦,置頂啦,取消置頂bulabula)。删除需要dataList.remove(position),置頂就是将點選的item先執行dataList.add(0,object),然後執行dataList.remove(position),最後adapter.notifyDataSetChanged();先來兩張效果圖

Android listView item側滑實作删除和置頂功能
Android listView item側滑實作删除和置頂功能
Android listView item側滑實作删除和置頂功能

1.建立attrs.xml,設定好自定義屬性(其實就是右邊隐藏布局的寬度啦),代碼很簡單,直接貼上來了

2.繼承listview實作我們自己想要的效果~

(1)第一步在構造方法裡擷取自定義的寬度(右邊局部隐藏的寬度)

(2)重寫onInterceptTouchEvent()和onTouchEvent()方法,在ACTION_DOWN裡擷取mCurrentItemView,mPreItemView,mFirstX,mFirstY等。ACTION_UP裡對是否在展示做簡單的判斷,在顯示則隐藏。

這裡面涉及到一個方法judgeScrollDirection,判斷滑動方向,我是這麼判斷的

(3)啊,最後還有一個get setRightViewWidth方法不要我忘了,後面執行個體化adapter時還要用

自定義listview到此就大功告成了,是不是直接就可以使用了呢?我很負責任的告訴你:絕對不可以!adapter表示自己不樂意!

下面就來寫一個adapter吧。繼承BaseAdapter重寫getCount,getItem,getItemId,getView。當然最重要的是getView。這些比較簡單,直接貼代碼了

細心的同學可能會發現onClick 對象,listener。這個listener是幹什麼的呢?原來啊這是個繼承OnClickListener的類,目的和ViewHolder一樣,複用item。以前隻是複用item控件,這下連監聽事件都可以複用了,嘿嘿。代碼是不會騙人的,來看看這個Onclick類吧

這裡用到了一個自己定義的接口MySetTopInterface,作用顯而易見,設定置頂的時候調用此接口,傳遞兩個參數,一個是被點選的View,另一個是position。

adapter表示自己作用已完成,等待上司訓示!

上司表示listview的item布局忘貼上來了,,,

下面貼item_sliding_listview布局,,,

至此,listview的初始化算完事了。

下面來看看怎麼應用吧(實作item置頂,取消置頂)

(1)在activity_main.xml裡添加自定義的listview。其中  xmlns:dyk="http://schemas.android.com/apk/res/com.example.qqslidingitem"為自定義命名空間

(2)接下來就該實作剛留的MySetTopInterface接口,複寫Onclick_ll_setTop_ll_right方法。(初始化工作直接貼代碼)

接下來重點完成置頂和取消置頂功能~

置頂setTop

取消置頂我采用的政策是先周遊datalist,然後找到前一項比他小後一項比他大的位置然後插入。細心的同學會發現這樣寫有一個小小的bug要是選擇項就是最小的沒法處理,是以會有些特殊情況要單獨拿出來讨論。

大功告成!接下來做一個小總結吧。首先是自定義屬性,其次是對布局隐藏的處理,第三是對getView中item的複用,最後是對自定義接口中删除,置頂,取消置頂功能實作的處理。第一次寫的部落格,不好的地方請諒解。

繼續閱讀