2016-07-19 6 views
0

私はGoogleとSOのすべてを見てみましたが、私の問題の解決策を見つけることができませんでした。Android CardViewドラッグアンドドロップItemTouchHelper

基本的には、私はCardViewsを利用したRecyclerViewを持っていて、そのカードビューにDrag &ドロップを許可します。スワイプは正常に機能しますが、ItemTouchHelperではドラッグアンドドロップは機能しません。私はなぜ、私は正しい動きの方向を指定したのか分からない。

スワイプディレクトリに対して左右にスワイプできますが、上下に移動するとdragDirsでは機能しません。私はswipeDirsにUPとDOWNを付けると、エミュレータ自体が "ドラッグ"を認識しないかどうかはわかりません。なぜなら、テストとしてあらゆる方向にスワイプすることができるからです。

は、私はすべてのヘルプは高く評価され

ItemTouchHelper.Callback scb = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT){ 
    @Override 
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target){ 
     //call back to adapter to swap positions, the Error is not with this line of code (at least not yet) 
     return true; 
    } 

    @Override 
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction){ 

    } 
}; 

ItemTouchHelper ith = new ItemTouchHelper(scb); 
ith.attachToRecyclerView(recyclerView); 

作業ドラッグ&ドロップのいずれかのビジュアルが届かない

、おかげ

答えて

2

はそれを考え出した、あなたはあなたのアダプタで

@Override 
public void onBindViewHolder(Adapter.ViewHolder holder, int position){ 
    final Adapter.ViewHolder xholder = holder; 
    holder.card.setOnTouchListener(new View.OnTouchListener(){ 
     @Override 
     public boolean onTouch(View view, MotionEvent event){ 
      if(MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) 
       listener.onStartDrag(xholder); 
      return false; 
     } 
    }); 
} 
をonBindViewHolderオーバーライドする必要があります

そして、ItemTouchHelperを含むRecyclerListに

@Override 
public void onStartDrag(ViewHolder holder){ 
    itemTouchHelper.startDrag(holder); 
} 
関連する問題