1. 程式人生 > >Android LRecyclerView 實現側滑選單、長按拖拽等功能

Android LRecyclerView 實現側滑選單、長按拖拽等功能

LRecyclerView能做什麼?

經過再三思考,同時也為了大家使用方便,LRecyclerView集成了SwipeMenu系列功能,包括Item側滑選單、長按拖拽Item,滑動刪除Item等功能。

demo apk下載地址:點我下載

功能演示

本次新增SwipeMenu系列功能描述如下:

  1. 左右兩側都有選單;
  2. 根據ViewType顯示選單;
  3. 長按拖拽Item(List),與選單結合;
  4. 長按拖拽Item(Grid);
  5. 滑動刪除Item;
  6. 指定某個Item不能拖拽或者不能滑動刪除;
  7. 用SwipeMenuLayout實現你自己的側滑。

SwipeMenuAdapter

為了實現SwipeMenu的功能,此次新增了一個

SwipeMenuAdapter類。

SwipeMenuAdapter與library中已經存在的LRecyclerViewAdapter會不會衝突呢?答案是不會。SwipeMenuAdapter是使用者級別的基類adapter,也就是使用者需要繼承SwipeMenuAdapter去實現自己的adapter,還像之前那樣使用即可。

SwipeMenuAdapter類的定義:

Java
1 publicabstractclassSwipeMenuAdapter<VH extendsRecyclerView.ViewHolder>extendsRecyclerView.Adapter<VH>

實現自己的MenuAdapter:

Java
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 publicclassMenuAdapterextendsSwipeMenuAdapter{protectedList mDataList=newArrayList<>();publicMenuAdapter(){}@OverridepublicintgetItemCount(){returnmDataList.size();}publicList getDataList(){returnmDataList;}publicvoidsetDataList(Collection list){this.mDataList.clear();this.mDataList.addAll(list);notifyDataSetChanged();}publicvoidaddAll(Collection list){intlastIndex=this.mDataList.size();if(this.mDataList.addAll(list)){notifyItemRangeInserted(lastIndex,list.size());}}publicvoidremove(intposition){mDataList.remove(position);notifyItemRemoved(position);if(position!=mDataList.size()){// 如果移除的是最後一個,忽略notifyItemRangeChanged(position,mDataList.size()-position);}}publicvoidclear(){mDataList.clear();notifyDataSetChanged();}@OverridepublicView onCreateContentView(ViewGroup parent,intviewType){returnLayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_text_swipe,parent,false);}@OverridepublicMenuAdapter.DefaultViewHolder onCompatCreateViewHolder(View realContentView,intviewType){returnnewDefaultViewHolder(realContentView);}@OverridepublicvoidonBindViewHolder(MenuAdapter.DefaultViewHolder holder,intposition){Stringitem=mDataList.get(position).title;DefaultViewHolder viewHolder=holder;viewHolder.tvTitle.setText(item);}staticclassDefaultViewHolder extendsRecyclerView.ViewHolder{TextView tvTitle;publicDefaultViewHolder(View itemView){super(itemView);tvTitle=(TextView)itemView.findViewById(R.id.tv_title);}}}

是不是很方便?MenuAdapter基本的功能都滿足了,直接拷貝到專案中即可使用。

上面說了那麼多,關鍵的也就這幾句:

Java
12345 mDataAdapter=newMenuAdapter();mDataAdapter.setDataList(dataList);mLRecyclerViewAdapter=newLRecyclerViewAdapter(this,mDataAdapter);mRecyclerView.setAdapter(mLRecyclerViewAdapter);

下面具體分析每個功能。

左右兩側都有選單

效果圖:

具體使用步驟如下。

    • 為SwipeRecyclerView的Item建立選單
      Java
      123 // 設定選單建立器。mRecyclerView.setSwipeMenuCreator(swipeMenuCreator);//設定選單Item點選監聽事件        mRecyclerView.setSwipeMenuItemClickListener(menuItemClickListener);

      其中swipeMenuCreator和menuItemClickListener程式碼如下:
      1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 /** * 選單建立器。在Item要建立選單的時候呼叫。 */privateSwipeMenuCreator swipeMenuCreator=newSwipeMenuCreator(){@OverridepublicvoidonCreateMenu(SwipeMenu swipeLeftMenu,SwipeMenu swipeRightMenu,intviewType){intsize=getResources().getDimensionPixelSize(R.dimen.item_height);// 新增左側的,如果不新增,則左側不會出現選單。{SwipeMenuItem addItem=newSwipeMenuItem(mContext).setBackgroundDrawable(R.drawable.selector_green)// 點選的背景。.setImage(R.mipmap.ic_action_add)// 圖示。.setWidth(size)// 寬度。.setHeight(size);// 高度。swipeLeftMenu.addMenuItem(addItem);// 新增一個按鈕到左側選單。SwipeMenuItem closeItem=newSwipeMenuItem(mContext).setBackgroundDrawable(R.drawable.selector_red).setImage(R.mipmap.ic_action_close).setWidth(size).setHeight(size);swipeLeftMenu.addMenuItem(closeItem);// 新增一個按鈕到左側選單。}// 新增右側的,如果不新增,則右側不會出現選單。{SwipeMenuItem deleteItem=newSwipeMenuItem(mContext).setBackgroundDrawable(R.drawable.selector_red).setImage(R.mipmap.ic_action_delete).setText("刪除")// 文字,還可以設定文字顏色,大小等。。.setTextColor(Color.WHITE).setWidth(size).setHeight(size);swipeRightMenu.addMenuItem(deleteItem);// 新增一個按鈕到右側側選單。SwipeMenuItem closeItem=newSwipeMenuItem(mContext).setBackgroundDrawable(R.drawable.selector_purple).setImage(R.mipmap.ic_action_close).setWidth(size).setHeight(size);swipeRightMenu.addMenuItem(closeItem);// 新增一個按鈕到右側選單。SwipeMenuItem addItem=newSwipeMenuItem(mContext).setBackgroundDrawable(R.drawable.selector_green).setText("新增").setTextColor(Color.WHITE).setWidth(size).setHeight(size);swipeRightMenu.addMenuItem(addItem);// 新增一個按鈕到右側選單。}}};/**     * 選單點選監聽。     */privateOnSwipeMenuItemClickListener menuItemClickListener=newOnSwipeMenuItemClickListener(){/**         * Item的選單被點選的時候呼叫。         * @param closeable       closeable. 用來關閉選單。         * @param adapterPosition adapterPosition. 這個選單所在的item在Adapter中position。         * @param menuPosition    menuPosition. 這個選單的position。比如你為某個Item建立了2個MenuItem,那麼這個position可能是是 0、1,         * @param direction       如果是左側選單,值是:SwipeMenuRecyclerView#LEFT_DIRECTION,如果是右側選單,值是:SwipeMenuRecyclerView#RIGHT_DIRECTION.         */@OverridepublicvoidonItemClick(Closeable closeable,intadapterPosition,intmenuPosition,intdirection){closeable.smoothCloseMenu

      相關推薦

      Android LRecyclerView 實現選單功能

      LRecyclerView能做什麼? 經過再三思考,同時也為了大家使用方便,LRecyclerView集成了SwipeMenu系列功能,包括Item側滑選單、長按拖拽Item,滑動刪除Item等功能。 demo apk下載地址:點我下載 功能演示 本次新增SwipeMenu系

      Android 實現選單-design

      google提供的Design開發包裡,有很多實用好看的新控制元件,這裡介紹下使用DrawerLayout+NavigationView實現側滑選單效果 要使用Design包,只要在專案的build.gradle中新增下依賴就好(記得更新SDK到最新版本)

      Android DrawerLayout+ToolBar+NavigationView實現選單效果,沉浸式狀態列

      最近看到很多APP都使用了Android Support Library的DrawerLayout實現側滑效果,下面我就自己寫了一個Demo來實現,其中還用到了Toolbar,NavigationView,沉浸式狀態列效果 先看效果圖 新增依賴

      Ruby+appium實現截圖日誌輸出到本地文件夾

      username 實例 方法 pytho 日誌 用戶名 read 清除 文件夾 require ‘rubygems‘ require ‘appium_lib‘require ‘date‘require ‘logger‘require ‘pathname‘require ‘t

      Swift實現選單SWRevealViewController

      SWRevealViewController Github下載地址 匯入 我這裡直接新建一個SWRevealViewController包,然後把程式碼直接貼上進入 在橋接檔案中匯入 #import “SWRevealViewController.h”

      iOS仿QQ選單登入按鈕動畫仿鬥魚直播APP城市選擇器自動佈局原始碼

      iOS精選原始碼 QQ側滑選單,右滑選單,QQ展開選單,QQ好友分組 image 登入按鈕 image 3分鐘快捷建立高效能輪播圖 ScrollView巢狀ScrolloView(UITableView 、UICollectionView)解決方案

      Toolbar 加 DrawerLayout 簡單使用實現選單

      佈局檔案 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout android:id="@+id/dw" android:layout_width="matc

      簡單實現選單

      1.自定義viewgroup繼承horizonScrollview public class MySliding extends HorizontalScrollView { private int pwidth; LinearLayout par; b

      mui實現選單及主體部分上下滑動

      <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,

      MUI 如何實現選單及其主體部分上下滑動

      在MUI文件的側滑選單介紹裡沒有說明如何實現側滑,而MUI側滑選單預設是沒有上下滑動功能的,需要啟用。 1、首先在 class="mui-scroll-wrapper" 的元素上新增ID: <!-- 側滑導航根容器 --> <div class="mui

      DrawerLayout實現選單

      1 DrawerLayout說明 1.1繼承體系:java.lang.Object <-android.view.View <- android.view.ViewGroup <- android.support.v4.widget.Dra

      SlidingMenu+Fragment實現選單

      實現SlidingMenu需要先匯入第三方slidingmenu.jar包。 複製  pan.baidu.com/s/1qW1525Q  到位址列。 主介面佈局 activity_main.xml <RelativeLayout xmlns:android="htt

      Android仿QQ(刪除置頂)功能

      實現類似QQ滑動出現可操作項的功能,在網上看到有人自定義LinearLayout實現這個效果,但是靈活性有限。此demo使用開源專案SwipeLayout實現該功能。關於SwipeLayout的常用設定和屬性,這裡都做介紹,下面進入正題。 一、效果圖 二

      Android RecyclerView實現刪除

      距上次寫部落格有半年多了,回憶起來都覺得不可思議,中間也想憋倆大招,總是被耽誤,這倆月忙完之後,終於空下來了,恰好新專案我和UI倆人商量一下,用MD來實現app。中間有個需求是RecyclerView中側滑顯示刪除按鈕,點選刪除。於是就有了這篇部落格。 一

      利用ObjectAnimator實現選單的效果

      objectAnimator是一種焦點可以隨著動畫移動的動畫,下面用一個簡單的平移動畫的例子,來實現側滑選單。 首先是頁面主體程式碼: package com.example.myobjectanimation; import android.anim

      Iwfu-NavigationView實現選單

      側滑選單已經司空見慣了,以前大多數app都使用slidingMenu,也有很多使用自定義的控制元件實現,後面有了support包的drawerLayout,這篇部落格裡我們使用Design包裡的NavigationView配合DrawerLayout實現側滑選單

      DrawerLayout選單Toolbar和沉浸式狀態列的使用

        最近在開發中需要用到側滑選單,以前使用的SlidingMenu,但似乎已經被Google淘汰了(過時了),於是乎使用了DrawerLayout來實現,既然是在專案使用的,那麼Toolbar和沉浸式狀態列也是要配合使用的,這裡做一下記錄。   我們先來看一看

      Ruby+appium實現截圖日誌輸出到本地資料夾

      require 'rubygems' require 'appium_lib' require 'date' require 'logger' require 'pathname' require 'thread' require"fileutils" capa

      [嵌入式開發模組]機械按鈕模組 純C語言 面向物件實現 按鍵消抖連擊

      前言 嵌入式開發時,我們經常會用到各種機械按鈕,由於機械按鈕的抖動特性,一般需要保持一個狀態一段時間不變才能認為按鍵真的按下去/擡起來了,不然可能會出現明明只點擊了一下,效果確是連擊了好幾下的情況。另一方面,我們為了最大化的發揮按鈕的作用,還經常需要實現長按,連擊等功能

      微信小程式——小實現(禁止頁面滾動複製)

      1. 禁止頁面滾動 對於小程式某些一屏的頁面,特別是全屏的swiper,並不希望頁面在豎直方向上可以滾動。 實現方式: 在需要禁止滾動頁面的json中加入: "disableScroll": true