最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android RecyclerView自由拖動item的實現(xiàn)代碼

 更新時間:2024年01月23日 11:18:09   作者:俠亦狐  
這篇文章主要介紹了Android RecyclerView自由拖動item的實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

原生就自帶有可拖動item的工具:ItemTouchHelper

看下效果:

接下來我們看如何使用。

1、自定義ItemTouchHelper的callback,用來限制是否可以拖動,以及拖動之后的位置更新:

其中判斷條件中的item.isMovable這邊是記錄該item是否可以拖動,也可以換成其他判斷條件比如根據(jù)位置判斷等。

private static class MyItemTouchHelperCallback extends ItemTouchHelper.Callback {
        private final ItemAdapter itemAdapter;
        public MyItemTouchHelperCallback(ItemAdapter itemAdapter) {
            this.itemAdapter= itemAdapter;
        }
        @Override
        public int getMovementFlags(@NonNull RecyclerView recyclerView,
                                    @NonNull RecyclerView.ViewHolder viewHolder) {
            int layoutPosition = viewHolder.getLayoutPosition();
            ItemInfo item = ItemAdapter.getItem(layoutPosition);
            if (!item.isMovable()) {
                //不可拖動
                return makeMovementFlags(0, 0);
            }
            //這里表示可以拖動的方向,比如如果不給往上方拖動則去掉ItemTouchHelper.UP
            final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN
                    | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
            return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG, dragFlags);
        }
        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView,
                              @NonNull RecyclerView.ViewHolder viewHolderSource,
                              @NonNull RecyclerView.ViewHolder viewHolderTarget) {
            int layoutPosition = viewHolderTarget.getLayoutPosition();
            ItemInfo item = itemAdapter.getItem(layoutPosition);
            if (!item.isMovable()) {
                //不可拖動到這里
                return false;
            }
            itemAdapter.onMove(viewHolderSource.getAdapterPosition(),
                    viewHolderTarget.getAdapterPosition());
            return true;
        }
        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
        }
    }

2、在適配器提供獲取item信息和移動之后更新數(shù)據(jù)的方法給到這個callback使用:

    public ItemInfo getItem(int position) {
        if (position >= 0 && position < mList.size()) {
            return mList.get(position);
        }
        return null;
    }
    public void onMove(int sourcePosition, int targetPosition) {
        ItemInfo item = mList.get(sourcePosition);
        mList.remove(sourcePosition);
        mList.add(targetPosition, item);
        notifyItemMoved(sourcePosition, targetPosition);
    }

3、使用這個callback類:

    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(
                new MyItemTouchHelperCallback(adapter));
    itemTouchHelper.attachToRecyclerView(recyclerView);

就可以了,簡簡單單,輕輕松松。

另外,需要留意一點,如果你是在onBindViewHolder中有設置點擊事件的,在onClickListener里面不要直接使用onBindViewHolder方法傳進來的position,因為在item位置移動之后,這個position是不會變的,注冊事件監(jiān)聽的時候這個值就跟你的點擊事件綁死了,所以需要動態(tài)獲取這個position:

    holder.view.setOnClickListener(v -> {
        int currentPosition = holder.getAdapterPosition();
        ItemInfo info = getItem(currentPosition);
        if (listener != null) {
            listener.onItemClick(currentPosition, info);
        }
    });

到此這篇關于Android RecyclerView自由拖動item的文章就介紹到這了,更多相關Android RecyclerView拖動item內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Android實現(xiàn)機房座位預約系統(tǒng)

    Android實現(xiàn)機房座位預約系統(tǒng)

    這篇文章主要為大家詳細介紹了Android實現(xiàn)機房座位預約系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Android開發(fā)基于ViewPager+GridView實現(xiàn)仿大眾點評橫向滑動功能

    Android開發(fā)基于ViewPager+GridView實現(xiàn)仿大眾點評橫向滑動功能

    這篇文章主要介紹了Android開發(fā)基于ViewPager+GridView實現(xiàn)仿大眾點評橫向滑動功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • Android Studio使用小技巧:自定義Logcat

    Android Studio使用小技巧:自定義Logcat

    這篇文章主要介紹了Android Studio使用小技巧:自定義Logcat,本文講解如何自定義Logcat的顏色,實現(xiàn)區(qū)別verbose、debug、error等分類信息,需要的朋友可以參考下
    2015-05-05
  • Android實現(xiàn)瘋狂連連看游戲之實現(xiàn)游戲邏輯(五)

    Android實現(xiàn)瘋狂連連看游戲之實現(xiàn)游戲邏輯(五)

    這篇文章主要為大家詳細介紹了Android實現(xiàn)瘋狂連連看游戲之實現(xiàn)游戲邏輯,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Android 軟鍵盤自動彈出與關閉實例詳解

    Android 軟鍵盤自動彈出與關閉實例詳解

    這篇文章主要介紹了Android 軟鍵盤自動彈出與關閉實例詳解的相關資料,為了用戶體驗應該自動彈出軟鍵盤而不是讓用戶主動點擊輸入框才彈出,這里舉例說明該如何實現(xiàn),需要的朋友可以參考下
    2016-12-12
  • Android自定義View構(gòu)造函數(shù)詳解

    Android自定義View構(gòu)造函數(shù)詳解

    這篇文章主要為大家詳細介紹了Android自定義View構(gòu)造函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Android實現(xiàn)圓角彈框功能

    Android實現(xiàn)圓角彈框功能

    這篇文章主要介紹了Android實現(xiàn)圓角彈框功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 深入分析Android加載so文件源碼

    深入分析Android加載so文件源碼

    這篇文章主要介紹了深入分析Android加載so文件源碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • flutter底部彈出BottomSheet詳解

    flutter底部彈出BottomSheet詳解

    這篇文章主要為大家詳細介紹了flutter底部彈出BottomSheet,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 淺談Android的Lifecycle源碼分析

    淺談Android的Lifecycle源碼分析

    這篇文章主要介紹了淺談Android的Lifecycle源碼分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07

最新評論

金阳县| 玉门市| 山阳县| 隆尧县| 德钦县| 乌苏市| 云和县| 金华市| 时尚| 灵璧县| 云霄县| 开封市| 始兴县| 太保市| 葵青区| 安吉县| 阿荣旗| 资阳市| 长阳| 越西县| 台山市| 涞水县| 汨罗市| 建阳市| 西昌市| 罗城| 夏河县| 高邮市| 神农架林区| 贵定县| 贡山| 白银市| 双牌县| 庆城县| 凤庆县| 塔河县| 东光县| 乌兰县| 乌拉特后旗| 民县| 嘉定区|