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
原创粉丝点击