【问题标题】:ItemTouchHelper and SwipeRefreshLayout (RecyclerView)ItemTouchHelper 和 SwipeRefreshLayout (RecyclerView)
【发布时间】:2015-10-31 01:35:10
【问题描述】:

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

问题在于 SwipeRefreshLayout 用于关闭滑动的动画是错误且有问题的。

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

【问题讨论】:

  • 这已通过使用最新的支持版本(v23 for sdk 23)修复。

标签: android android-viewpager android-recyclerview android-design-library swiperefreshlayout


【解决方案1】:

您可以在滑动时禁用 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);

【讨论】:

    【解决方案2】:

    众多之一:

     /**
     * 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

    【讨论】:

    • 这似乎是另一个问题。
    • ItemTouchHelper 不涉及此问题。 setRefreshing 在我的示例中正常工作。
    猜你喜欢
    • 2014-09-30
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 2017-02-07
    • 2019-09-27
    • 1970-01-01
    相关资源
    最近更新 更多