ItemTouchHelper和SwipeRefreshLayout(RecyclerView)

7

我希望使用v7设计库中的新ItemTouchHelper。我在SwipeRefreshLayout中使用它。

问题是,在SwipeRefreshLayout中,滑动以解除动画的动画效果错误且有缺陷。

有人知道如何解决这个问题吗?


这可以通过使用最新的支持版本(sdk 23 的v23)来解决。 - Elias
2个回答

16

只要您在滑动屏幕,就可以禁用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

其中之一:

 /**
 * 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);
        }
    });
}

其他可能性:

发布了一些解决方法的错误报告


这似乎是另一个问题。 - Elias
ItemTouchHelper与此问题无关。setRefreshing在我的示例中正常工作。 - Elias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接