RecycleView实现左右滑动监听和上下拖拽调换顺序
来源:互联网 发布:分贝测试软件 编辑:程序博客网 时间:2024/06/04 20:03
之前想实现ListView右滑删除和上下拖拽交换位置的功能,但是找来找去,要么就实现上比较复杂,要么就是代码太老了。从github找了几个开源项目,但是总是有这样那样的bug。但是后来得知看到Google居然已经内置了这两个功能,只需要使用v7包里的RecycleView去实现就可以了。
代码如下
package justwen.demorecycleview;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.helper.ItemTouchHelper;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.ArrayList;import java.util.Collections;import java.util.List;public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private List<Integer> mData = new ArrayList<>(); private class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{ public class MyViewHolder extends RecyclerView.ViewHolder{ public TextView mTextView; public MyViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(R.id.tv); } } @Override public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_list_item,parent,false); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) { holder.mTextView.setText(mData.get(position)+""); } @Override public int getItemCount() { return mData.size(); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); initViews(); } private void initData(){ Collections.addAll(mData, new Integer[]{1,2,3,4,5,6,7,8,9,10}); } private void initViews(){ mRecyclerView = (RecyclerView) findViewById(R.id.list); // 设置布局管理器,默认是vertical布局 mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); // 设置适配器 mRecyclerView.setAdapter(new MyAdapter()); // 重点,创建一个ItemTouchHelper类的对象,需要传入一个ItemTouchHelper的内部类Callbacl的对象,这里使用了Google内置的SimpleCallback// 第一个参数是可以拖拽的方向,第二个参数是可以滑动的方向 ItemTouchHelper touchHelper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP|ItemTouchHelper.DOWN,ItemTouchHelper.RIGHT) { @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { mRecyclerView.getAdapter().notifyItemMoved(viewHolder.getAdapterPosition(),target.getAdapterPosition()); Collections.swap(mData,viewHolder.getAdapterPosition(),target.getAdapterPosition()); return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { mData.remove(viewHolder.getAdapterPosition()); mRecyclerView.getAdapter().notifyDataSetChanged(); } }); //将recycleView和ItemTouchHelper绑定 touchHelper.attachToRecyclerView(mRecyclerView); }}
上面我是直接用的Google写好的SimpleCallBack类,如果想自己判断回调上述两个方法的时机,可以使用Callback类重载getMoveMentFlags方法。
PS 我感觉RecycleView已经可以完全替代ListView, 不仅不用自己去实现ViewHolder了,Google还支持了很多的功能,自己写的app所有需要显示列表数据的地方都已经使用了RecycleView了。
0 0
- RecycleView实现左右滑动监听和上下拖拽调换顺序
- Android 自定义View 实现手势监听,左右滑动,上下滑动
- CSS3实现上下滑动和左右摆动
- android左右滑动监听,上下滑动
- viewPager + recycleView 实现左右滑动
- Android5.x:RecycleView(三):上下拖动和左右滑动删除
- 使用RecyclerView实现ListView,GridView的效果(上下,左右滑动),拖拽与滑动删除
- js实现页面左右上下拖拽
- 左右上下滑动表格
- 用JS 这些实现左右滑动 上下滑动
- ViewPage左右滑动和PullToRefreshListView上下滑动事件冲突
- 实现监听左右滑动的事件
- ListView上下滑动监听
- Android实现Excel表格,且表格能左右、上下滑动
- Appium 1.7 实现上下、左右滑动页面方法
- 监听界面左右滑动
- Android——滑动监听RecyclerView线性流+左右划删除+上下移动
- android SlidingDrawer左右滑动 上下滑动
- 3.Nodejs入门-----数据库
- [Struts 2] 如何快速找出所访问页面的真实路径(转向哪个.jsp文件)?
- 魅族安装不了安装过的应用
- 小感(2017-1-8)
- 微信小程序 Audio API
- RecycleView实现左右滑动监听和上下拖拽调换顺序
- JavaScript引用类型(Object 类型)
- 软件管家的一些实现
- C#判断WebBrowser加载完毕的方法
- 创建存储过程和调用存储过程(Mysql)
- Spark RDD概念学习系列之Spark的算子的分类(十一)
- 年会系统-心得体会
- Lambda表达式详解
- python list