SmartRefreshLayout 嵌套reycleview 长按排序下拉刷新

2023-11-15

布局文件  
<com.scwang.smartrefresh.layout.header.ClassicsHeader
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        app:srlAccentColor="@android:color/darker_gray" />
 <com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView
                android:id="@+id/recycler_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                />
  <com.scwang.smartrefresh.layout.footer.ClassicsFooter
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:srlAccentColor="@android:color/darker_gray" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
添加拖拽侧滑删除监听
fragmentTabHomeBinding.recyclerView.setOnItemMoveListener(mItemMoveListener);
OnItemMoveListener mItemMoveListener = new OnItemMoveListener() {
    @Override
    public boolean onItemMove(RecyclerView.ViewHolder srcHolder, RecyclerView.ViewHolder targetHolder) {
      //拖拽交换位置排序  
      if (srcHolder.getItemViewType() != targetHolder.getItemViewType()) return false;
        oldPosition = srcHolder.getAdapterPosition();
        newPosition = targetHolder.getAdapterPosition();
        Collections.swap(eventsList, oldPosition, newPosition);
         //
    
         eventsViewDataBindingBaseRecycleViewAdapter.notifyItemMoved(oldPosition, newPosition);
        
        return true;
    }

    @Override
    public void onItemDismiss(RecyclerView.ViewHolder srcHolder) {
            //侧滑删除
    }

};
    fragmentTabHomeBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
   
  //开启拖拽排序
   fragmentTabHomeBinding.recyclerView.setLongPressDragEnabled(true);
//侧滑创建菜单  
  fragmentTabHomeBinding.recyclerView.setSwipeMenuCreator(new SwipeMenuCreator() {
        @Override
        public void onCreateMenu(SwipeMenu leftMenu, SwipeMenu rightMenu, int position) {
            SwipeMenuItem deleteItem = new SwipeMenuItem(getActivity());
            deleteItem.setImage(R.drawable.dsrqp_sj_del);
            deleteItem.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
            deleteItem.setWidth(SizeUtils.dp2px(100));
            rightMenu.addMenuItem(deleteItem);
        }
    });

//点击侧滑删除按钮删除
    fragmentTabHomeBinding.recyclerView.setSwipeMenuItemClickListener(new SwipeMenuItemClickListener() {
        @Override
        public void onItemClick(SwipeMenuBridge menuBridge, int position) {
            menuBridge.closeMenu();
            //删除逻辑
           
        }
    });
    fragmentTabHomeBinding.activityBuyRecordRefresh.setOnLoadMoreListener(new OnLoadMoreListener() {
        @Override
        public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
           //加载跟多
        }
    });
    fragmentTabHomeBinding.recyclerView.setSwipeItemClickListener(new SwipeItemClickListener() {
        @Override
        public void onItemClick(View itemView, int position) {
          //item点击事件
        }
    });
    eventsViewDataBindingBaseRecycleViewAdapter = new DaoShuriEnventRecycleViewAdapter(getActivity(), eventsList, R.layout.adpter_envent_daoshuri, fragmentTabHomeBinding.recyclerView);
    fragmentTabHomeBinding.recyclerView.setAdapter(eventsViewDataBindingBaseRecycleViewAdapter);

//添加手势监听
    fragmentTabHomeBinding.recyclerView.setOnItemStateChangedListener(mStateChangedListener);

}

int oldPosition;
int newPosition;
private OnItemStateChangedListener mStateChangedListener = (viewHolder, actionState) -> {
    if (actionState == OnItemStateChangedListener.ACTION_STATE_DRAG) {
        // 状态:正在拖拽。
        Vibrator vib = (Vibrator) getActivity().getSystemService(Service.VIBRATOR_SERVICE);
        vib.vibrate(40);
        // 拖拽的时候背景加深,这里我们可以添加一个特殊背景。
        viewHolder.itemView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.transparent_background_light));

        //当长按时拖拽,禁止刷新加载
        fragmentTabHomeBinding.activityBuyRecordRefresh.setEnableRefresh(false);
        fragmentTabHomeBinding.activityBuyRecordRefresh.setEnableLoadMore(false);
    } else if (actionState == OnItemStateChangedListener.ACTION_STATE_SWIPE) {
        // 状态:滑动删除。

    } else if (actionState == OnItemStateChangedListener.ACTION_STATE_IDLE) {
        // 在手松开的时候还原背景。
        ViewCompat.setBackground(viewHolder.itemView,
                ContextCompat.getDrawable(getActivity(), R.color.transparent));
        // 状态:手指松开。

        if (oldPosition != newPosition) {
             //我在这里写的调用接口进行排序

          然后将位置复位
            oldPosition = 0;
            newPosition = 0;
        }

       //开启可以刷新加载
        fragmentTabHomeBinding.activityBuyRecordRefresh.setEnableRefresh(true);
        fragmentTabHomeBinding.activityBuyRecordRefresh.setEnableLoadMore(true);
    }
};

注意:之前本人在做排序的时候拖拽总是拖动一条刷新一下,如果你出现这个问题,请注意  if (srcHolder.getItemViewType() != targetHolder.getItemViewType()) return false;
这行代码,检查一下adpter的    

@Override
public int getItemViewType(int position) {
    return 0;
}

返回类型是一个值,如果每次返回position就会只能拖动一下;估计只有我这样搞过,哈哈,谢谢大家耐心观看。

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SmartRefreshLayout 嵌套reycleview 长按排序下拉刷新 的相关文章

  • Android:自定义Toast通知继承默认Toast

    我有一个自定义的 Toast 通知 其中包含图像和文本 自定义 toast 工作正常 但我想知道如何使我的自定义 toast 继承默认 toast 的外观和感觉 我希望它看起来像默认的那样 具有漂亮的圆角和边框 这就是我定制的吐司的样子
  • SpinnerAdapter 中 getView 和 getDropDownView 的区别

    当你实现 SpinnerAdapter 时 你会得到获取下拉视图 http developer android com reference android widget SpinnerAdapter html getDropDownView
  • Android 堆栈大小

    我如何获取和更改 Android 应用程序的堆栈大小 即使是主线程 主线程堆栈大小是在固件中设置的 无法修改 除非修改您自己手机的固件 正如斯特朗先生指出的那样 对于您分叉的线程 您可以设置自己的堆栈大小
  • phonestateintentreceiver.notifyPhoneCallState 的用途是什么?

    谁能告诉我有什么用phonestateintentreceiver notifyPhoneCallState 我知道现在在这里发布答案为时已晚 可能对将来参考此问题的人有所帮助 如果您的应用程序希望收到有关来电的通知 则必须调用notify
  • Android布局中如何实现Button的自动宽度

    我有几个垂直列出的按钮 我需要它们都具有相同的宽度 而且还要显示其中的所有文本 基本上我需要所有它们的宽度作为最大的宽度的包裹宽度 希望我解释得很好 现在 我已经有一种布局可以在我的 Samsung Galaxy S2 4 1 2 上运行
  • 如何在Android Studio中安装android 6.0.1模拟器?

    我在我的 Android 模拟器上遇到这个问题E Surface getSlotFromBufferLocked 未知缓冲区 0xab7519c0 https stackoverflow com questions 33046375 e s
  • Android:Google Maps API 密钥注册:MD5 认证密钥

    如何获取MD5指纹密钥 我正在使用这个命令 C Program Files Java jdk1 7 0 04 bin gt keytool exe list alias androiddebugkey keystore C Document
  • Room - LiveData 观察器在数据库更新时不会触发

    我试图在下面的代码中找出 为什么在我用新数据填充数据库后 Room 的 LiveData observable 不会给我新的转变 这是放在我的活动的 onCreate 方法中 shiftsViewModel ViewModelProvide
  • 如何使用android ndk r9b为Android编译FFMPEG

    我想设计一个Android应用程序 可以通过FFMPEG命令播放和编辑视频 但我不知道如何在Android上使用FFMPEG 我尝试过从Google搜索到的许多方法 但它们太旧了 无法实现 现在 FFMPEG的最新版本是2 1 1 Andr
  • Buildozer Numpy RuntimeError:工具链损坏:无法链接简单的 C 程序

    用 Python 编写我的第一个 Android 应用程序并使用 Buildozer 对其进行打包 因为稍后在项目中需要使用numpy 所以我尝试打包以下测试代码 import numpy import kivy kivy require
  • 改造添加带有令牌和 ID 的标头

    我在获取经过身份验证的用户时遇到问题 在此之前我得到了令牌和用户 ID 现在我需要使用访问令牌和 ID 从服务器获取用户 我有标题格式 https i stack imgur com OQ87Y png 现在我尝试使用拦截器添加带有用户令牌
  • 带有可点击区域的 Android 图像

    我需要建议如何在 Android 下实现以下功能 我需要一个表示类似于图形 来自离散数学 的图像 具有顶点和边缘 我可以在其中单击每个顶点或边缘并触发不同的操作 请告诉我如何实现这一目标 也许与imagebuttons 或另一种表示此功能的
  • Android Studio 3.0 - 设置未保存

    我已将 文件 gt 设置 gt 编辑器 gt 代码样式 中的 右边距 列 从默认的 100 增加到 140 不幸的是 每次重新启动 Android Studio 后 该边距都会重置 我还尝试导出和导入我的设置 但这并不能阻止重置右边距 希望
  • 在 WebView 中打开 PDF 文件

    大约 2 天 我尝试在我的自定义中打开 PDF 文件WebvView 这是我的WebView code import android app AlertDialog import android app ProgressDialog imp
  • AAR 可以包含传递依赖吗? [复制]

    这个问题在这里已经有答案了 现在我有一个库项目 比如项目 Foo 它依赖于像 OkHttp 这样的库 现在 Foo 有一个 Maven 构建步骤 可以生成 AAR 并将其推送到公共位置 现在假设我有项目 B 我们将其称为 Bar Bar是一
  • 膨胀类 android.support.design.internal.BottomNavigationView 时出错

    我正在制作我的第一个应用程序 这是一个简单的应用程序 带有启动屏幕和主要活动 现在我有两个构建变体 免费版本 活动底部有 Admob 横幅 付费版本 该应用程序不会在底部显示 admob 横幅 而是将其替换为用于切换活动的底部导航视图 我将
  • 如何在 Android 上设置 Google Drive API?

    我一直在尝试将 Google Drive 功能集成到我的应用程序中 但我无法使用任何内置功能 因此我相信我要么错过了一个步骤 要么做得不正确 我正在遵循官方的 Google 开发者指南 https developers google com
  • 无法查询 ContentResolver 以从 my_downloads 获取下载文件的名称,但在 all_downloads 中工作正常

    我的应用程序设置为激活一次具有扩展名的文件 myappdata被打开 它通过这个意图过滤器来实现这一点
  • 使用 Arduino 来操作 Android [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有人尝试过让 Android 和 Arduino 相互通信吗 我在网上找到了几个项目 Amarino http www amarino tool
  • 如何在不显示父活动的情况下将一个全屏对话框片段替换为另一个全屏对话框片段?

    我有一个使用单个自定义 DialogFragment 类的活动 它的外观是数据驱动的 因此不同的调用看起来可能相当不同 它是 全屏 即 setStyle DialogFragment STYLE NO FRAME android R sty

随机推荐