RecyclerView的出現不能否認是開發者們的福利,它自帶的ItemTouchHelper能很是輕鬆的完成側滑刪除、長按拖拽,可是不免有的開發者不會使。再加上實際的開發中側滑刪除每每會用側滑菜單來實現,這就難爲了有些開發者了。SwipeRecyclerView的出現就完美的解決了這些問題,側滑刪除、長按拖拽Item僅須要一句話…java
由於SwipeRecyclerView發佈已經一個月了,如今有了幾個不小的更新,都是剛需,因此再次分享出來給你們,但願你們能多多支持。android
SwipeRecyclerView將完美解決這些問題:git
- 如下功能所有支持:豎向ListView、橫向ListView、Grid、StaggeredGrid四種形式。
- RecyclerView 左右兩側 側滑菜單。
- 菜單能夠自適應Item不一樣高度。
- 某一個Item顯示的不一樣的菜單(相似QQ)。
- 菜單橫向排布、菜單豎向排布(看下圖)。
- RecyclerView長按拖拽Item。
- RecyclerView側滑刪除item。
- 指定RecyclerView的某一個Item不能滑動刪除或長按拖拽。
- 用SwipeMenuLayout在任何地方均可以實現你本身的側滑菜單。
- 使用SwipeRecyclerView下拉刷新、自動加載更多。
- 能夠和ViewPager嵌套使用(兼容滑動衝突)。
SwipeRecyclerView的源碼託管在Github:github.com/yanzhenjie/…,歡迎Star。github
若是你是手機看本文,記不住項目地址沒關係,記住個人我的主頁就好,個人全部項目在我網站都有。app
個人域名是:yanzhenjie.com,也就是我名字嚴振杰.com,我相信你確定記住了,沒記住的再看一眼啦。框架
要是還沒記住,更簡單的是百度/Google搜索我名字:嚴振杰,排名第一的就是我。ide
gif有一些失真,且網頁加載速度慢,能夠[下載demo的apk][3]看效果。 佈局
SwipeMenuLayout
開發本身的側滑菜單。
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>複製代碼
這裏列出關鍵實現,具體請參考demo,或者加最上面的交流羣一塊兒討論。 更多教程請進入個人博客查看。spa
recyclerView.setLongPressDragEnabled(true);// 開啓長按拖拽
recyclerView.setItemViewSwipeEnabled(true);// 開啓滑動刪除。
recyclerView.setOnItemMoveListener(onItemMoveListener);// 監聽拖拽和側滑刪除,更新UI和數據。複製代碼
側滑菜單支持自動打開某個Item的菜單,並能夠指定是左邊仍是右邊的:
// 打開第一個Item的左側菜單。
recyclerView.openLeftMenu(0);
// 打開第一個Item的右側菜單。
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" />複製代碼
第二步,設置菜單建立器、菜單點擊監聽:
SwipeMenuRecyclerView swipeMenuRecyclerView = findViewById(R.id.recycler_view);
// 設置菜單建立器。
swipeMenuRecyclerView.setSwipeMenuCreator(swipeMenuCreator);
// 設置菜單Item點擊監聽。
swipeMenuRecyclerView.setSwipeMenuItemClickListener(menuItemClickListener);複製代碼
第三步,菜單建立器建立菜單:
/** * 菜單建立器。在Item要建立菜單的時候調用。 */
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)// 點擊的背景。
.setImage(R.mipmap.ic_action_add) // 圖標。
.setWidth(size) // 寬度。
.setHeight(size); // 高度。
swipeLeftMenu.addMenuItem(addItem); // 添加一個按鈕到左側菜單。
SwipeMenuItem deleteItem = new SwipeMenuItem(mContext)
.setBackgroundDrawable(R.drawable.selector_red)
.setImage(R.mipmap.ic_action_delete) // 圖標。
.setText("刪除") // 文字。
.setTextColor(Color.WHITE) // 文字顏色。
.setTextSize(16) // 文字大小。
.setWidth(size)
.setHeight(size);
swipeRightMenu.addMenuItem(deleteItem);// 添加一個按鈕到右側側菜單。.
// 上面的菜單哪邊不要菜單就不要添加。
}
};複製代碼
更多使用方法請參考Demo,或者加最上方的QQ羣來交流。
第四步,繼承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) {
}
}複製代碼
就到這裏,更多的細節,請參考Github上的demo和源碼,源碼demo下載傳送門。