2

Я хочу использовать новый ItemTouchHelper из библиотеки дизайна v7. Я использую его внутри SwipeRefreshLayout.ItemTouchHelper и SwipeRefreshLayout (RecyclerView)

Проблема заключается в том, что с помощью SwipeRefreshLayout анимация для удаления салфетки неверна и ошибочна.

Кто-нибудь знает, как это исправить?

+0

Это исправлено с использованием последней версии поддержки (v23 для sdk 23). – Elias

ответ

0

один из многих:

/** 
* Notify the widget that refresh state has changed. 
* method to avoid bug in setRefreshing(boolean)  
* Do not call this when refresh is triggered by a swipe gesture. 
* @param swipeRefreshLayout - layout, take care not to pass null parameter 
* @param isRefreshing - whether or not the view should show refresh progress. 
*    
*/ 
public static void setRefreshing(final SwipeRefreshLayout swipeRefreshLayout, final boolean isRefreshing) { 
    swipeRefreshLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      swipeRefreshLayout.setRefreshing(isRefreshing); 
     } 
    }); 
} 

некоторые другие возможности:

posted bug with some workarounds

+0

Это, похоже, еще одна проблема. – Elias

+0

ItemTouchHelper не участвует в этой проблеме. setRefreshing работает правильно для моего примера. – Elias

6

Вы можете отключить SwipeRefreshLayout до тех пор, пока вы ударяя.

final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { 
    @Override 
    public int getMovementFlags(RecyclerView recyclerView, ViewHolder viewHolder) { 
     return makeMovementFlags(0, ItemTouchHelper.START | ItemTouchHelper.END); 
    } 

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

    @Override 
    public void onSwiped(ViewHolder viewHolder, int direction) { 
     // do something 
    } 

    @Override 
    public void onSelectedChanged(ViewHolder viewHolder, int actionState) { 
     super.onSelectedChanged(viewHolder, actionState); 
     final boolean swiping = actionState == ItemTouchHelper.ACTION_STATE_SWIPE; 
     swipeRefreshLayout.setEnabled(!swiping); 
    } 
}); 
itemTouchHelper.attachToRecyclerView(recyclerView); 
+0

Простой и работает отлично. – Ljdawson

Смежные вопросы