android RecyclerView側(cè)滑菜單,滑動(dòng)刪除,長(zhǎng)按拖拽,下拉刷新上拉加載
本文介紹的庫(kù)中的側(cè)滑效果借鑒自SwipeMenu,并對(duì)SipwMenu的源碼做了修改與Bug修復(fù),然后才開發(fā)出的SwipeRecyclerView。
- 需要說明的是,本庫(kù)沒有對(duì)RecyclerView做大的修改,只是ItemView的封裝。看起來是對(duì)RecyclerView的修改,其實(shí)僅僅是為RecyclerView添加了使用的方法API而已。
- 本庫(kù)已經(jīng)更新了三個(gè)版本了,會(huì)一直維護(hù)下去,根據(jù)小伙伴的要求,以后也會(huì)添加一些其它功能。
SwipeRecyclerView將完美解決這些問題:
- 以下功能全部支持:豎向ListView、橫向ListView、Grid、StaggeredGrid四種形式。
- RecyclerView 左右兩側(cè) 側(cè)滑菜單。
- 菜單橫向排布、菜單豎向排布。
- RecyclerView長(zhǎng)按拖拽Item。
- RecyclerView側(cè)滑刪除item。
- 指定RecyclerView的某一個(gè)Item不能滑動(dòng)刪除或長(zhǎng)按拖拽。
- 某一個(gè)Item顯示的不同的菜單(類似QQ)。
- 用SwipeMenuLayout在任何地方都可以實(shí)現(xiàn)你自己的側(cè)滑菜單。
- 使用SwipeRecyclerView下拉刷新、自動(dòng)加載更多。
- 可以和ViewPager嵌套使用(兼容滑動(dòng)沖突)。
引用方法
AndroidStudio使用Gradle構(gòu)建添加依賴(推薦)
compile 'com.yanzhenjie:recyclerview-swipe:1.0.2'
Or Maven:
<dependency> <groupId>com.yanzhenjie</groupId> <artifactId>recyclerview-swipe</artifactId> <version>1.0.2</version> <type>pom</type> </dependency>
我在開發(fā)SwipeRecyclerView時(shí)引用的RecyclerView版本如下:
compile 'com.android.support:recyclerview-v7:23.4.0'
效果圖
gif有一些失真,且網(wǎng)頁(yè)加載速度慢,可以[下載demo的apk][3]看效果。
側(cè)滑菜單
- 左右兩側(cè)都有菜單,主動(dòng)調(diào)出第幾個(gè)菜單或者手指滑動(dòng)出現(xiàn)。
- 根據(jù)ViewType某一個(gè)Item顯示的不同的菜單(類似QQ)
和ViewPager嵌套 下拉刷新、自動(dòng)加載更多
- 和ViewPager嵌套使用,兼容了滑動(dòng)沖突。
- 可以和任何下拉刷新的框架結(jié)合,滑動(dòng)到底部自動(dòng)加載更多。
長(zhǎng)按拖拽 側(cè)滑菜單結(jié)合使用
- 一直按住Item進(jìn)行拖拽排序,支持List、Grid形式。
- 長(zhǎng)按拖拽并且和側(cè)滑菜單結(jié)合使用。
直接滑動(dòng)刪除 長(zhǎng)按拖拽Item排序
- 側(cè)滑直接刪除,也可以長(zhǎng)按拖拽排序。
- 可以指定某個(gè)Item不能被側(cè)滑刪除、不能被長(zhǎng)按拖拽。
豎型菜單 用自定義布局實(shí)現(xiàn)自己的菜單
- 給菜單設(shè)置排列方向,支持橫向、豎向。
- 開發(fā)者用庫(kù)中的SwipeMenuLayout開發(fā)自己的側(cè)滑菜單。
使用介紹
這里列出關(guān)鍵實(shí)現(xiàn),具體請(qǐng)參考demo,或者加最上面的交流群一起討論。 更多教程請(qǐng)進(jìn)入我的博客查看。
啟用SwipeReyclerView的長(zhǎng)按Item拖拽功能和側(cè)滑刪除功能
recyclerView.setLongPressDragEnabled(true);// 開啟長(zhǎng)按拖拽 recyclerView.setItemViewSwipeEnabled(true);// 開啟滑動(dòng)刪除。 recyclerView.setOnItemMoveListener(onItemMoveListener);// 監(jiān)聽拖拽和側(cè)滑刪除,更新UI和數(shù)據(jù)。
添加Item側(cè)滑菜單
側(cè)滑菜單支持自動(dòng)打開某個(gè)Item的菜單,并可以指定是左邊還是右邊的:
// 打開第一個(gè)Item的左側(cè)菜單。 recyclerView.openLeftMenu(0); // 打開第一個(gè)Item的右側(cè)菜單。 recyclerView.openRightMenu(0);
第一步,引用自定義View:SwipeMenuReyclerView:
<com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" />
第二步,設(shè)置菜單創(chuàng)建器、菜單點(diǎn)擊監(jiān)聽:
SwipeMenuRecyclerView swipeMenuRecyclerView = findViewById(R.id.recycler_view); // 設(shè)置菜單創(chuàng)建器。 swipeMenuRecyclerView.setSwipeMenuCreator(swipeMenuCreator); // 設(shè)置菜單Item點(diǎn)擊監(jiān)聽。 swipeMenuRecyclerView.setSwipeMenuItemClickListener(menuItemClickListener);
第三步,菜單創(chuàng)建器創(chuàng)建菜單:
/** * 菜單創(chuàng)建器。在Item要?jiǎng)?chuàng)建菜單的時(shí)候調(diào)用。 */ private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { @Override public void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) { SwipeMenuItem addItem = new SwipeMenuItem(mContext) .setBackgroundDrawable(R.drawable.selector_green)// 點(diǎn)擊的背景。 .setImage(R.mipmap.ic_action_add) // 圖標(biāo)。 .setWidth(size) // 寬度。 .setHeight(size); // 高度。 swipeLeftMenu.addMenuItem(addItem); // 添加一個(gè)按鈕到左側(cè)菜單。 SwipeMenuItem deleteItem = new SwipeMenuItem(mContext) .setBackgroundDrawable(R.drawable.selector_red) .setImage(R.mipmap.ic_action_delete) // 圖標(biāo)。 .setText("刪除") // 文字。 .setTextColor(Color.WHITE) // 文字顏色。 .setTextSize(16) // 文字大小。 .setWidth(size) .setHeight(size); swipeRightMenu.addMenuItem(deleteItem);// 添加一個(gè)按鈕到右側(cè)側(cè)菜單。. // 上面的菜單哪邊不要菜單就不要添加。 } };
更多使用方法請(qǐng)參考Demo。
第四步,繼承SwipeMenuAdapter,和正常的Adapter一樣使用:
public class MenuAdapter extends SwipeMenuAdapter<MenuAdapter.DefaultViewHolder> { @Override public int getItemCount() { return 0; } @Override public View onCreateContentView(ViewGroup parent, int viewType) { return null; } @Override public ViewHolder onCompatCreateViewHolder(View realContentView, int viewType) { return null; } @Override public void onBindViewHolder(MenuAdapter.DefaultViewHolder holder, int position) { } }
就到這里,更多的細(xì)節(jié),請(qǐng)參考demo和源碼,源碼demo下載傳送門。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- RecyclerView實(shí)現(xiàn)側(cè)滑拖拽功能
- Android recyclerview實(shí)現(xiàn)拖拽排序和側(cè)滑刪除
- android的RecyclerView實(shí)現(xiàn)拖拽排序和側(cè)滑刪除示例
- RecyclerView進(jìn)階:使用ItemTouchHelper實(shí)現(xiàn)拖拽和側(cè)滑刪除效果
- LRecyclerView側(cè)滑iOS阻塞效果不完整的解決辦法
- Android實(shí)現(xiàn)多線程斷點(diǎn)續(xù)傳
- Android實(shí)現(xiàn)斷點(diǎn)續(xù)傳功能
- 詳解Android使用OKHttp3實(shí)現(xiàn)下載(斷點(diǎn)續(xù)傳、顯示進(jìn)度)
- android實(shí)現(xiàn)多線程下載文件(支持暫停、取消、斷點(diǎn)續(xù)傳)
- RecyclerView實(shí)現(xiàn)側(cè)滑和網(wǎng)絡(luò)斷點(diǎn)續(xù)傳
相關(guān)文章
Android 5.0 實(shí)現(xiàn)水波擴(kuò)散效果
這篇文章主要為大家詳細(xì)介紹了Android 5.0 實(shí)現(xiàn)水波擴(kuò)散效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01android 中win10 使用uwp控件實(shí)現(xiàn)進(jìn)度條Marquez效果
這篇文章主要介紹了android 中win10 使用uwp控件實(shí)現(xiàn)進(jìn)度條Marquez效果,需要的朋友可以參考下2017-06-06Android開發(fā)RecyclerView性能優(yōu)化之異步預(yù)加載
這篇文章主要介紹了Android開發(fā)RecyclerView性能優(yōu)化之異步預(yù)加載實(shí)現(xiàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Android 和 windows C/C++/QT通訊時(shí)字節(jié)存儲(chǔ)
本篇文章主要介紹 Android和Windows 通訊時(shí)數(shù)據(jù)地址的理解,這里提供代碼實(shí)例進(jìn)行分析,有需要參考的朋友可以看下2016-07-07Flutter實(shí)現(xiàn)仿微信分享功能的示例代碼
Flutter 用來快速開發(fā) Android iOS平臺(tái)應(yīng)用,在Flutter 中,通過 fluwx或者fluwx_no_pay 插件可以實(shí)現(xiàn)微信分享功能,本文將具體介紹實(shí)現(xiàn)的示例代碼,需要的可以參考一下2022-01-01Android Studio 3.0被調(diào)方法參數(shù)名提示的取消方法
這篇文章主要介紹了去掉android studio 3.0被調(diào)方法參數(shù)名提示的解決方法,在文章末尾給大家補(bǔ)充介紹了Android Studio 3.0 gradle提示太老的解決方法,非常不錯(cuò),需要的朋友可以參考下2017-11-11Android使用Scrolling機(jī)制實(shí)現(xiàn)Tab吸頂效果
app 首頁(yè)中經(jīng)常要實(shí)現(xiàn)首頁(yè)頭卡共享,tab 吸頂,內(nèi)容區(qū)通過 ViewPager 切換的需求,以前往往是利用事件處理來完成,但是這些也有一定的弊端和滑動(dòng)方面不如意的地方,本文我們利用NestedScrolling機(jī)制來實(shí)現(xiàn),感興趣的朋友可以參考下2024-01-01簡(jiǎn)單實(shí)現(xiàn)Android本地音樂播放器
這篇文章主要為大家詳細(xì)介紹了如何簡(jiǎn)單實(shí)現(xiàn)Android本地音樂播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05