2016-08-17 3 views
2

こんにちは私はリサイクラービューを使用しており、ITEMTOUCHHELPERの作業を適用しています。 Logic (direction == ItemTouchHelper.LEFT)を適用してアイテムを削除します。 これらのすべてが正しく機能します。ItemTouchHelperが正しく動作しません。

しかし、私は右側をスワイプし、左側をスワイプします。これは、右側でスワッピングを意味する0より大きい値を与えます。

アイテムを削除しても問題ありませんそのままそのまま放置すると、この奇妙な動作が始まります。

私は複数回左にスワイプすると、が0になると、再び動作を開始します。ここで

私の実装ここで

private void initSwipe(){ 
     ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { 

      @Override 
      public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { 
       return false; 
      } 

      @Override 
      public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { 
       int position = viewHolder.getAdapterPosition(); 


       if (direction == ItemTouchHelper.LEFT){ 
        Cursor cursor = ((BookRecyclerAdapter)recyclerView.getAdapter()).getCursor(); 
        cursor.moveToPosition(position); 
        int pageNo = cursor.getInt(cursor.getColumnIndex(BookMarkContract.AddsEntry.COLUMN_NAME_PAGE_NO)); 
        dbHelper.deletePageNo(pageNo); 
        bookRecyclerAdapter.swapCursor(dbHelper.getAllBookMarks()); 
        bookRecyclerAdapter.notifyItemRemoved(position); 
        bookRecyclerAdapter.notifyDataSetChanged(); 

       } 
       else 
       return; 



      } 

      @Override 
      public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { 

       Bitmap icon; 

       Log.d("dX",""+dX); 
       if(actionState == ItemTouchHelper.ACTION_STATE_SWIPE){ 
        if(dX>0) 
        { 
         dX=0; 
        } 
        View itemView = viewHolder.itemView; 
        float height = (float) itemView.getBottom() - (float) itemView.getTop(); 
        float width = height/3; 
        if(dX>0) 
         return; 
else { 

         p.setColor(Color.parseColor("#D32F2F")); 
         RectF background = new RectF((float) itemView.getRight() + dX, (float) itemView.getTop(), (float) itemView.getRight(), (float) itemView.getBottom()); 
         c.drawRect(background, p); 
         icon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_rub); 
         RectF icon_dest = new RectF((float) itemView.getRight() - 2 * width, (float) itemView.getTop() + width, (float) itemView.getRight() - width, (float) itemView.getBottom() - width); 
         c.drawBitmap(icon, null, icon_dest, p); 
        } 

       } 
       super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); 
      } 
     }; 
     ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); 
     itemTouchHelper.attachToRecyclerView(recyclerView); 
    } 

は私が左Swippingときの私のログの猫スニペットですが、それは私にのdX> 0

を与えています1本の問題

SWIPPING左側が与えるもののdX> 0

QUESTION私はこの奇妙な振る舞いを取得していますなぜ

?それは、アプリがスワイプぶら下げのようなユーザーを感じる しかし、それは私が左にスワイプしても右側を拭いているぶら下がっていません。

+0

は申し訳ありません。 –

+0

なぜこのx値が必要ですか? recyclerviewでスワイプ・トゥ・ディス・クリアを実装する方法の良い例が必要な場合は、次の記事をご覧ください:https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf#.q88lttfor – XxGoliathusxX

+0

@ XxGoliathusxXは基本的に私はこのことを知っていますが、私は右にスワイプしたくありません。 –

答えて

1

だけleftswipeを許可する場合、これはあなたのソリューションです:私は英語のネイティブスピーカーではないよ

@Override 
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { 
    //int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; 
     int swipeFlags = ItemTouchHelper.START; 
     return makeMovementFlags(dragFlags, swipeFlags); 
} 
+0

ここでdragFlagsとは何ですか? 受け入れられる答え –

+0

これは私の問題を 'dX <0'または' 0'を非常に素晴らしいものではない –

+0

ドラッグフラグは、アイテムをドラッグアンドドロップできる方向です。この場合上下に。この動作をサポートしていると仮定します。 :D – XxGoliathusxX

関連する問題