【问题标题】:Recyclerview - smoothScrollToPosition to Top of list and then animate the addition of itemRecyclerview - smoothScrollToPosition 到列表顶部,然后动画添加项目
【发布时间】:2015-06-20 18:49:15
【问题描述】:

我正在尝试创建一个 Recyclerview,它会首先滚动到顶部,然后将项目添加到 recyclerview 上。

这是我目前的代码:

        while (!mLayoutManager.isSmoothScrolling()) {
            mRecyclerView.smoothScrollToPosition(0);
        }
        PostList.add(0, post);
        mAdapter.notifyItemInserted(0);
        mAdapter.notifyItemRangeChanged(1, PostList.size());

这确实会滚动到顶部,但添加的项目不是动画的(尽管它已添加到列表中)。

我认为是因为加法动画与smoothScrollToPosition动画同时发生,所以当它到达顶部时,加法动画已经完成,所以我们看不到它。

我可以使用 Handler.postDelayed 给我的滚动动画一些时间来完成,但这并不可取,因为我不知道 smoothScrollToPosition 动画将完成的时间。

【问题讨论】:

    标签: android adapter android-recyclerview smooth-scrolling


    【解决方案1】:

    我猜你希望当 do while 完成时,滚动将完成。这不是它的工作原理,滚动发生在动画帧中,如果您要放置一个 while 循环等待它完成,您的应用程序将冻结,因为您将阻塞主线程。

    相反,您可以这样做:

    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        public void onScrollStateChanged(RecyclerView rv, int state) {
            if (state == RecyclerView.SCROLL_STATE_IDLE) {
                PostList.add(0, post);
                mAdapter.notifyItemInserted(0);
                rv.removeOnScrollListener(this);
            }
        }
    });
    recyclerView.smoothScrollToPosition(0);
    

    没有测试代码,但基本想法是添加一个滚动监听器,以便在平滑滚动停止时收到通知,然后添加项目。

    【讨论】:

    • 嗨,感谢您的回复 - 我似乎无法在 recyclerview 类中找到 addOnScrollListener 或 removeOnScrollListener 方法,即使它在文档developer.android.com/reference/android/support/v7/widget/… 中列为方法。我很难过,我正在使用 com.android.support:recyclerview-v7:22.0.+
    • 使用 22.2。之前有 setOnScrollListener。
    • 谢谢 - 如果我在方法中再添加一行代码就可以工作:mRecyclerView.smoothScrollToPosition(0);
    • 哦,您希望新添加的项目可见。添加项目时,您也可以只调用 scrollToPosition(0) 。无需平滑滚动
    • @yigit 我有一个 RecyclerView 列表并尝试调用 scrollToPosition(0) 没有运气。您能否查看stackoverflow.com/questions/41686194/… 看看您是否对如何修复有任何想法?
    猜你喜欢
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多