博客
关于我
ItemTouchHelper基本用法
阅读量:138 次
发布时间:2019-02-27

本文共 4596 字,大约阅读时间需要 15 分钟。

         ItemTouchHelper是谷歌提供的用于实现Recyclerview 拖拽效果的帮助类,今天我们来学习下它的基本用法

首先ItemTouchHelper需要实现它的一个内部抽象类CallBack

 

public class ItemTouchHelperCallback extends ItemTouchHelper.Callback {    private IMoveAndSwipeCallback iMoveAndSwipeCallback;    public void setiMoveAndSwipeCallback(IMoveAndSwipeCallback iMoveAndSwipeCallback) {        this.iMoveAndSwipeCallback = iMoveAndSwipeCallback;    }    /**     * 设置拖拽和item滑动的可支持方向     *     * @param recyclerView     * @param viewHolder     * @return     */    @Override    public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {        //支持上下拖拽        final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;        //item支持左滑        final int swipeFlags = ItemTouchHelper.LEFT;        return makeMovementFlags(dragFlags, swipeFlags);    }    /**     * 拖拽结束后(手指抬起)会回调的方法     *      * @param recyclerView     * @param viewHolder 手指拖拽的item     * @param viewHolder1 移动到的item     * @return     */    @Override    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {        if (iMoveAndSwipeCallback != null) {            iMoveAndSwipeCallback.onMove(viewHolder.getAdapterPosition(), viewHolder1.getAdapterPosition());        }        return true;    }    /**     * 侧滑回调     *      * @param viewHolder     * @param swipeDir 方向     */    @Override    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int swipeDir) {        if (iMoveAndSwipeCallback != null) {            iMoveAndSwipeCallback.onSwiped(viewHolder.getAdapterPosition());        }    }}

主要用到三个方法,getMovementFlags方法用于确定支持的拖拽方向和侧滑方向,onMove方法是拖拽结束后(手指抬起)会回调的方法,onSwiped则是侧滑回调,我这边还用了一个接口来给外部调用监听onMove和onSwiped

 

/** * 拖拽和侧滑抽象接口 */public interface IMoveAndSwipeCallback {    void onMove(int prePosition, int postPosition);    void onSwiped(int position);}

接下是我们在Activity中给RecyclerView设置ItemTouchHelper

 

public class ItemTouchHelperActivity extends AppCompatActivity implements IMoveAndSwipeCallback {    RecyclerView rv;    private List
strings; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_item_touch_helper); rv = findViewById(R.id.rv); rv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); rv.addItemDecoration(new MyDecoration(this, MyDecoration.HORIZONTAL_LIST)); initData(); MyAdapter myAdapter = new MyAdapter(this); rv.setAdapter(myAdapter); //给RecyclerView设置ItemTouchHelper ItemTouchHelperCallback itemTouchHelperCallback = new ItemTouchHelperCallback(); itemTouchHelperCallback.setiMoveAndSwipeCallback(this); ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itemTouchHelperCallback); itemTouchHelper.attachToRecyclerView(rv); } private void initData() { strings = new ArrayList<>(); for (int i = 0; i < 20; i++) { strings.add(String.valueOf(i)); } } @Override public void onMove(int prePosition, int postPosition) { Collections.swap(strings, prePosition, postPosition); if (rv.getAdapter() != null) { rv.getAdapter().notifyItemMoved(prePosition, postPosition); } } @Override public void onSwiped(int position) { strings.remove(position); if (rv.getAdapter() != null) { rv.getAdapter().notifyItemRemoved(position); } } class MyAdapter extends RecyclerView.Adapter { private Context context; public MyAdapter(Context context) { this.context = context; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_text, viewGroup, false)); } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) { MyViewHolder myViewHolder = (MyViewHolder) viewHolder; myViewHolder.tv.setText(strings.get(i)); } @Override public int getItemCount() { return strings.size(); } class MyViewHolder extends RecyclerView.ViewHolder { public TextView tv; public MyViewHolder(@NonNull View itemView) { super(itemView); tv = itemView.findViewById(R.id.tv); } } }}

转自:https://www.jianshu.com/p/d36f8f01a10d
 

转载地址:http://zxub.baihongyu.com/

你可能感兴趣的文章
mysql查询总成绩的前3名学生信息
查看>>
mysql查询慢排查
查看>>
MySQL查询报错ERROR:No query specified
查看>>
mysql查询数据库储存数据的占用容量大小
查看>>
MySQL查询数据库所有表名及其注释
查看>>
MySQL查询数据表中数据记录(包括多表查询)
查看>>
MySQL查询结果排序
查看>>
MYSQL查询语句优化
查看>>
mysql查询语句能否让一个字段不显示出来_天天写order by,你知道Mysql底层执行原理吗?
查看>>
MySQL查询语句:揭秘专家秘籍,让你秒变数据库达人!
查看>>
mysql查询超时对PHP执行的影响
查看>>
mysql查询输出到excel文件_如何保存mysql查询输出到excel或.txt文件?
查看>>
mysql查询过程
查看>>
MySQL模拟Oracle序列sequence
查看>>
Mysql模糊查询like效率,以及更高效的写法
查看>>
MySQL死锁套路:一次诡异的批量插入死锁问题分析
查看>>
Mysql死锁问题Deadlock found when trying to get lock;try restarting transaction
查看>>
mysql每个数据库的最大连接数_MySQL数据库最大连接数
查看>>
Mysql流程控制结构,if函数、case结构、if结构、循环结构
查看>>
mysql添加外网访问权限
查看>>