布局文件
<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就会只能拖动一下;估计只有我这样搞过,哈哈,谢谢大家耐心观看。