android RecyclerView 上下交換位子,左右刪除。
阿新 • • 發佈:2019-01-24
1. 介面
public interface ItemTouchListener { /** * 上下拖拽時回撥方法,adpater將兩個位置的item調換位置 * @param fromPosition * @param toPosition */ void onItemMoved(int fromPosition,int toPosition); void onItemDismiss(int position);//左右刪除item void romeall();//秦楚所有的 }
2.繫結資料
private void intview() { myview = (RecyclerView) findViewById(R.id.myview); List list=new ArrayList(); for (int i=0;i<9;i++){ list.add("我是第"+i+"個item"); } //實現adtpter myadapter=new Myadapter(list,this,myview); //Callback 是RecyclerView的一個輔助類 具體不懂可以百度 ItemTouchHelper.Callback callback=new MyItemTouchHelper(myadapter); //實現Callback ItemTouchHelper helper=newItemTouchHelper(callback); //填充到myview 也就是RecyclerView helper.attachToRecyclerView(myview); //設定RecyclerView 佈局樣式是list還是grid myview.setLayoutManager(new LinearLayoutManager(this)); myview.setAdapter(myadapter); //在RecyclerView下面的一個button 是單獨的一個控制元件 Button mybutton= (Button) findViewById(R.id.mybutton); mybutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //清除lsit資料 myadapter.romeall(); myadapter.notifyDataSetChanged(); } }); }
3. adapter實現自定義介面
@Override public void onItemMoved(int fromPosition, int toPosition) { Collections.swap(list,fromPosition,toPosition); notifyItemMoved(fromPosition,toPosition); // notifyDataSetChanged(); } @Override public void onItemDismiss(int position) { list.remove(position); notifyItemRemoved(position); // notifyDataSetChanged(); } @Override public void romeall() { list.removeAll(list); }
4.
MyItemTouchHelper callback 實現類
public class MyItemTouchHelper extends ItemTouchHelper.Callback { private final ItemTouchListener mItemTouchListener; public MyItemTouchHelper(ItemTouchListener listener) { this.mItemTouchListener = listener; } @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 viewHolder1) { if (viewHolder.getItemViewType() != viewHolder1.getItemViewType()) { return false; //不通之間的View不能拖動 } mItemTouchListener.onItemMoved(viewHolder.getAdapterPosition(), viewHolder1.getAdapterPosition()); return true; } @Override public boolean isLongPressDragEnabled() { return true; } @Override public boolean isItemViewSwipeEnabled() { return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int i) { mItemTouchListener.onItemDismiss(viewHolder.getAdapterPosition());