2015-11-05 132 views
11

我用RecyclerView與ItemTouchHelper做刷卡刪除,並添加類似這樣的刷卡項目下刪除按鈕: Swiping specRecyclerView ItemTouchHelper如何鎖定滑動項目?

但是,當我完成刷卡,該項目將被從列表中移除很快! 如何鎖定已滑動的物品,並通過點擊刪除按鈕將其刪除? 就像Gmail的行爲一樣。

ps。我在這裏 https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=189057

+0

你有能力實現它..如果是的請分享recyclerview的ItemTouchHelper ...我卡住了,我發佈了類似這樣的問題,http://stackoverflow.com/questions/35131463/swipe -with-recyclerview-without-any-third-party-library – TheReprator

回答

0

張貼同樣的問題在您的SimpleCallback

設置你的getMovementFlags()然後OnClickListeners

public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { 
    if (dX > ARCHIVE_LAYOUT_WIDTH) { 
     getDefaultUIUtil().onDraw(c, recyclerView, ((YOUR_VIEW_HOLDER) viewHolder).getSwipableView(), dX, dY, actionState, isCurrentlyActive); 
    } 
} 

這不是最乾淨的解決方案,但它讓你更接近。

4

只需按照例如 「Support7Demos/src目錄/ COM /例子/安卓/ supportv7 /空間/觸摸/ SwipeToDismissActivity.java」,並在方法一小變 「onChildDraw」

public boolean onChildDraw(Canvas c, RecyclerView recyclerView, 
     RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, 
     boolean isCurrentlyActive) { 
    float translationX = Math.min(-dX, viewHolder.itemView.getWidth()/2); 
    viewHolder.itemView.setTranslationX(-translationX); 
    return true; 
} 

此方法必須返回true,否則ItemTouchUIUtil將覆蓋translationX Screenshot

+0

很酷它爲我的woking –

3
@Override 
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { 
    float translationX; 
    if(dX > 0){ 
     translationX = Math.min(-dX, viewHolder.itemView.getWidth()/2); 
    } 
    else { 
     translationX = Math.max(dX, (-1)* viewHolder.itemView.getWidth()/2); 
    } 
    super.onChildDraw(c, recyclerView, viewHolder, translationX, dY, actionState, isCurrentlyActive); 
} 
+0

不幸的是,這隻適用於當你打開時,當你關閉你需要恢復你收到的dX,直到你達到門檻。然後,當您釋放時,您會看到從中間開始的項目,因爲真正的dX位於中間。 – Davidea

0

這個職位之前提出的解決方案使只有最終效果1/5。

不幸的是,它們只在滑動才能打開1個項目時才起作用,但當您關閉它時,您需要恢復從參數接收的dX量,直到達到閾值。然後,當你釋放你看到從中間開始的項目,因爲你收到的真正的dX仍然指向中間!真是醜陋的故障。

我相信ItemTouchHelper僅適用於每次完全滑動1個項目。除非有一種方法可以停止接收DX比所需的寬度更大,那麼你需要解決以下問題:

  • 您需要添加一個複雜的邏輯來發現哪個項目揮動指的是。
  • 如果滾動,則刷卡效果也會丟失。
  • 最後,你不能點擊後視圖,你需要跟蹤物品處於滑動位置,如果你沒有保存它,只要你點擊它,它會重新繪製前視圖和動畫。