RecyclerView下拉刷新,滑动删除以及拖动变换位置
来源:互联网 发布:java map中文乱码 编辑:程序博客网 时间:2024/05/23 22:17
RecyclerView下拉刷新,滑动删除以及拖动变换位置
好久都没有写博客了!前段时间做项目比较忙,在项目中用了RecyclerView替换了listview,感觉还是挺不错的!以下就把学习的过程和写的东西分享给大家:
关于RecyclerView的介绍什么的我就不过多说了,网上有很多这个例子了,具体的方法我是参考了
http://www.cnblogs.com/Fndroid/p/5245250.html
然后根据他的思路把他写的东西实现了下。废话不多说了上传下我的demo,感兴趣的同学可以去下载看看,具体的实现思路就看上边的链接!
代码块
MainAcitivty
public class MainActivity extends AppCompatActivity implements MyAdapter.OnItemButtonCLickListener,SwipeRefreshLayout.OnRefreshListener, OnStartDragListener { MyAdapter adapter; SwipeRefreshLayout refreshlayout;//下拉刷新的控件 List<Map<String,String>> list;//数据 private ItemTouchHelper mItemTouchHelper;//滑动 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View view=getLayoutInflater().inflate(R.layout.activity_main,null); setContentView(view); RecyclerView recyclerView=(RecyclerView) findViewById(R.id.recyc); refreshlayout=(SwipeRefreshLayout) findViewById(R.id.swip); list=new ArrayList<>(); for (int i=0;i<20;i++){ Map<String,String> map=new HashMap<>(); map.put("title","标题"+i); map.put("reason","内容"+i); map.put("date","时间"+i); list.add(map); } adapter=new MyAdapter(list,view); adapter.setOnItemButtonClickListener(this); recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); recyclerView.setAdapter(adapter); refreshlayout.setOnRefreshListener(this); ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(adapter); mItemTouchHelper = new ItemTouchHelper(callback); mItemTouchHelper.attachToRecyclerView(recyclerView); } @Override public void OnItemAlter(int position) { } @Override public void OnItemDelete(int position) { adapter.notifyItemRemoved(position); list.remove(position); } @Override public void onRefresh() { setData();//下拉刷新时获取数据 } private void setData(){ new Thread() { @Override public void run() { refreshlayout.setRefreshing(true); try { Thread.sleep(1000);//休眠1S后去让刷新动画消失 }catch (Exception e){ } Message message=new Message(); message.what=1; handler.sendMessage(message); } }.start(); } private Handler handler=new Handler(){ public void handleMessage(Message message){ if (message.what==1){ refreshlayout.setRefreshing(false);//刷新动画消失 } super.handleMessage(message); } }; @Override public void onStartDrag(RecyclerView.ViewHolder viewHolder) { mItemTouchHelper.startDrag(viewHolder); }}
MyAdapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHodle> implements ItemTouchHelperAdapter { List<Map<String,String>> data; OnItemButtonCLickListener listener; View view; public MyAdapter(List<Map<String,String>> data,View view){ if (data==null){ this.data=new ArrayList<>(); }else{ this.data=data; } this.view=view; } @Override public ViewHodle onCreateViewHolder(ViewGroup parent, int viewType) { ViewHodle vh = new ViewHodle(LayoutInflater.from(parent.getContext()).inflate(R.layout.main_lv_item, null)); return vh; } public void setOnItemButtonClickListener(OnItemButtonCLickListener listener){ this.listener = listener; } @Override public void onBindViewHolder(ViewHodle holder, int position) { final ViewHodle viewHodle=(ViewHodle)holder; Map<String,String> map=data.get(position); viewHodle.title.setText(map.get("title")); viewHodle.date.setText(map.get("date")); viewHodle.reason.setText(map.get("reason")); viewHodle.delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar snackbar=Snackbar.make(view,"确定删除?",Snackbar.LENGTH_LONG); snackbar.setAction("确定",new MyOnClickListener(viewHodle.getLayoutPosition())).show(); } }); } @Override public boolean onItemMove(int fromPosition, int toPosition) { Collections.swap(data, fromPosition, toPosition); notifyItemMoved(fromPosition, toPosition); return true; } @Override public void onItemDismiss(int position) { data.remove(position); notifyItemRemoved(position); } private class MyOnClickListener implements View.OnClickListener { private final int position; public MyOnClickListener(int position) { this.position = position; } @Override public void onClick(View v) { listener.OnItemDelete(position); } } @Override public int getItemCount() { return data.size(); } class ViewHodle extends RecyclerView.ViewHolder implements ItemTouchHelperViewHolder { TextView title,reason,date,delete; public ViewHodle(View itemView) { super(itemView); title=(TextView)itemView.findViewById(R.id.title); reason=(TextView)itemView.findViewById(R.id.reason); date=(TextView)itemView.findViewById(R.id.date); delete=(TextView)itemView.findViewById(R.id.delete); } @Override public void onItemSelected() { itemView.setBackgroundColor(Color.LTGRAY); } @Override public void onItemClear() { itemView.setBackgroundColor(0); } } interface OnItemButtonCLickListener { void OnItemAlter(int position); void OnItemDelete(int position); }}
SimpleItemTouchHelperCallback
public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback { public static final float ALPHA_FULL = 1.0f; private final ItemTouchHelperAdapter mAdapter; public SimpleItemTouchHelperCallback(ItemTouchHelperAdapter adapter) { mAdapter = adapter; } @Override public boolean isLongPressDragEnabled() { return true; } @Override public boolean isItemViewSwipeEnabled() { return true; } @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { // Set movement flags based on the layout manager if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; final int swipeFlags = 0; return makeMovementFlags(dragFlags, swipeFlags); } else { final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; final int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; return makeMovementFlags(dragFlags, swipeFlags); } } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder source, RecyclerView.ViewHolder target) { if (source.getItemViewType() != target.getItemViewType()) { return false; } // Notify the adapter of the move mAdapter.onItemMove(source.getAdapterPosition(), target.getAdapterPosition()); return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int i) { // Notify the adapter of the dismissal mAdapter.onItemDismiss(viewHolder.getAdapterPosition()); } @Override public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { // Fade out the view as it is swiped out of the parent's bounds final float alpha = ALPHA_FULL - Math.abs(dX) / (float) viewHolder.itemView.getWidth(); viewHolder.itemView.setAlpha(alpha); viewHolder.itemView.setTranslationX(dX); } else { super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); } } @Override public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { // We only want the active item to change if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) { if (viewHolder instanceof ItemTouchHelperViewHolder) { // Let the view holder know that this item is being moved or dragged ItemTouchHelperViewHolder itemViewHolder = (ItemTouchHelperViewHolder) viewHolder; itemViewHolder.onItemSelected(); } } super.onSelectedChanged(viewHolder, actionState); } @Override public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { super.clearView(recyclerView, viewHolder); viewHolder.itemView.setAlpha(ALPHA_FULL); if (viewHolder instanceof ItemTouchHelperViewHolder) { // Tell the view holder it's time to restore the idle state ItemTouchHelperViewHolder itemViewHolder = (ItemTouchHelperViewHolder) viewHolder; itemViewHolder.onItemClear(); } }
具体的代码:
http://download.csdn.net/detail/qklnmc/9695756
0 0
- RecyclerView下拉刷新,滑动删除以及拖动变换位置
- RecyclerView的滑动删除以及下拉加载
- RecyclerView 下拉刷新 加载更多 左滑删除 拖动排序
- RecyclerView 滑动删除与拖动的实现
- RecyclerView滑动删除和拖动排序
- RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载
- RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载
- RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载
- RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载
- RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载
- RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载
- RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载
- RecyclerView侧滑菜单,滑动删除,长按拖拽,下拉刷新上拉加载
- 可折叠的视图+RecyclerView以及下拉刷新
- 高仿QQlistview滑动删除+下拉刷新
- RecyclerView借助ItemTouchHelper实现拖动和滑动删除功能
- ItemTouchHelper实现RecyclerView拖动排序和滑动删除
- RecyclerView实现拖动排序和滑动删除功能
- C#函数 161013
- LeetCode-通配符模式串匹配
- VC配置文件读取和写入
- js中使用jsp脚本和el
- Android技术的网址资源集合,此贴不定期更新,2
- RecyclerView下拉刷新,滑动删除以及拖动变换位置
- 基于N源码的AccountManagerService简单认识和账户添加流程分析
- Android中实现不同文字颜色和图文混排的Span总结
- PHP防止表单重复提交
- ios 10问题的解决方法
- 静态代码块、构造代码块、局部代码块、构造方法的执行顺序
- 关于java源码在编译时提示:编码GBK的不可映射字符 的问题
- Android开发:清空缓存
- 南阳 oj 448 寻找最大数