ItemTouchHelper之SwipeDismiss

[quote]This is a utility class to add swipe to dismiss and drag & drop support to RecyclerView.[/quote]

它是一个非常强大的工具,感觉跟ViewDragHelper一样,不过ItemTouchHelper顾名思义是处理item的touch事件的.
它能够让你非常容易实现侧滑删除,拖拽的功能.

今天,就拿它来实现以下侧滑删除!~

开始
首先我们看下ItemTouchHelper的构造方法ItemTouchHelper(Callback callback) 它需要我们传入一个Callback
而刚好Android非常任性,已经帮我们实现了一个:SimpleCallback

甚至,在注释里已经给我们写好了样例!!!有兴趣的同学可以去看看,这里就不给出了.

接下来上代码!~

定义一个Adapter
这个adapter没什么特别的,挺简单的,相信大家会

public static class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder> implements View.OnClickListener{
private Context mContext;
private List<String>mDatas;
public ListAdapter(Context context,List<String> data){
mDatas= data;
mContext = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.material_list_item, parent, false);
return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.text.setText(mDatas.get(position));

holder.text.setTag(position);
holder.text.setOnClickListener(this);
}

@Override
public int getItemCount() {
return mDatas.size();
}

@Override
public void onClick(View v) {
TextView tv = (TextView) v;
Toast.makeText(mContext, tv.getText()+";;"+tv.getTag(), Toast.LENGTH_SHORT).show();
}

public static class ViewHolder extends RecyclerView.ViewHolder{

TextView text;
public ViewHolder(View view){
super(view);
text = (TextView) view.findViewById(R.id.iv_item);
}
}

}


定义一个RecyclerView
设置为垂直list的样式,并且与上面的Adapter关联

mRvList.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
mRvList.setAdapter(mAdapter);


实例化一个ItemTouchHelper
再实例化ItemTouchHelper之前我们再看一下SimpleCallback的构造方法:

ItemTouchHelper.SimpleCallback(int dragDirs, int swipeDirs)

dragDirs 代表你想拖拽的方向

swipeDirs 你想滑动的方向

都分别有一下值,很好理解:

LEFT

RIGHT

START

END

UP

DOWN

动手

// 0 代表我不拖拽, ItemTouchHelper.RIGHT代表我往右滑动

new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {

//在这个回调 我们处理滑动
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
Log.d(TAG, "onSwiped() called with " + "viewHolder = [" + viewHolder + "], direction = [" + direction + "]");
//这里我们通过viewHolder获取position
int position = viewHolder.getAdapterPosition();
mData.remove(position);
mAdapter.notifyItemRemoved(position);
Toast.makeText(getActivity(), "拆散的position:"+position, Toast.LENGTH_SHORT).show();
}

// 暂时不处理移动事件...
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
Log.d(TAG, "onMove() called with " + "recyclerView = [" + recyclerView + "], viewHolder = [" + viewHolder + "], target = [" + target + "]");
return false;
}

}).attachToRecyclerView(mRvList);


[url]http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0822/3349.html[/url]
[url]http://blog.csdn.net/easion_zms/article/details/47147191[/url]

[url]http://www.open-open.com/lib/view/open1435287807716.html[/url]

RecyclerView的拖动和滑动 第一部分 :基本的ItemTouchHelper示例
[url]http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0630/3123.html[/url]
RecyclerView的拖动和滑动 第二部分 :拖块,Grid以及自定义动画
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0724/3219.html

非常易于使用的滑动删除库,用于Android的RecyclerView,支持水平方向和竖直方向的滑动删除。
[url]http://www.open-open.com/lib/view/open1445773975085.html[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`ItemTouchHelper` 并不会传递 `TouchEvent` 给 `RecyclerView`,而是通过拦截 `RecyclerView` 中的触摸事件来实现拖拽和滑动操作。在 `ItemTouchHelper.Callback` 中的 `onMove` 和 `onSwiped` 方法中,我们可以根据用户的操作来更新数据源,并调用相应的方法来更新 UI。 以下是一个示例代码,用于在 `ItemTouchHelper.Callback` 中实现拖拽操作: ```java ItemTouchHelper.Callback callback = new ItemTouchHelper.Callback() { @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; return makeMovementFlags(dragFlags, swipeFlags); } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { // 当 Item 被拖拽时,调用此方法 // 在此方法中,可以更新数据源,并调用 notifyItemMoved 方法更新 UI // 返回 true 表示已经处理了此事件 return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { // 当 Item 被滑动时,调用此方法 // 在此方法中,可以更新数据源,并调用 notifyItemRemoved 方法更新 UI } @Override public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { // 当 Item 被选中时,调用此方法 // 在此方法中,可以为 Item 添加动画效果 } @Override public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { // 当 Item 被拖拽时,调用此方法 // 在此方法中,可以为 Item 添加动画效果 } @Override public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { // 当 Item 被释放时,调用此方法 // 在此方法中,可以为 Item 添加动画效果 } }; ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback); itemTouchHelper.attachToRecyclerView(recyclerView); ``` 在此代码中,我们重写了 `ItemTouchHelper.Callback` 中的方法来实现拖拽和滑动操作。在 `onMove` 方法中,我们可以更新数据源,并调用 `notifyItemMoved` 方法来更新 UI。在 `onSwiped` 方法中,我们可以更新数据源,并调用 `notifyItemRemoved` 方法来更新 UI。最后,我们将 `ItemTouchHelper` 添加到 `RecyclerView` 中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值