在Android中,使用ItemTouchHelper
可以实现拖放和滑动删除功能
RecyclerView
:<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" />
RecyclerView.Adapter
,并在onCreateViewHolder
方法中绑定您的列表项布局:public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<MyData> mData;
public MyAdapter(List<MyData> data) {
mData = data;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.textView.setText(mData.get(position).getText());
}
@Override
public int getItemCount() {
return mData.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.text_view);
}
}
}
RecyclerView
和ItemTouchHelper
:RecyclerView recyclerView = findViewById(R.id.recycler_view);
MyAdapter adapter = new MyAdapter(yourDataList);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
ItemTouchHelper.Callback callback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
adapter.notifyItemRemoved(viewHolder.getAdapterPosition());
}
@Override
public boolean isItemViewSwipeEnabled() {
return true;
}
@Override
public boolean isLongPressDragEnabled() {
return true;
}
};
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
itemTouchHelper.attachToRecyclerView(recyclerView);
在这个示例中,我们使用了ItemTouchHelper.SimpleCallback
,并设置了onMove
和onSwiped
方法。onMove
方法返回false
,因为我们不支持在列表中拖动项目。onSwiped
方法用于处理滑动删除操作。
现在,您可以在RecyclerView
中拖动和滑动删除项目。如果您想要限制项目的拖动范围,可以在onMove
方法中添加逻辑来检查当前位置和目标位置,然后根据需要允许或禁止拖动。
这里是一个简单的示例,限制项目只能在相邻位置之间拖动:
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
int fromPosition = viewHolder.getAdapterPosition();
int toPosition = target.getAdapterPosition();
if (Math.abs(fromPosition - toPosition) == 1) {
return false; // 允许相邻位置之间的拖动
} else {
return true; // 不允许其他范围的拖动
}
}
根据您的需求,您可以修改onMove
方法来实现所需的拖动范围限制。
领取专属 10元无门槛券
手把手带您无忧上云