1. 程式人生 > >android RecyclerView 上下交換位子,左右刪除。

android RecyclerView 上下交換位子,左右刪除。

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=new
ItemTouchHelper(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());