android - Recyclerview - smoothScrollToPosition 到列表顶部,然后动画添加项目

标签 android adapter android-recyclerview smooth-scrolling

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

这是我目前的代码:

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

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

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

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

最佳答案

我猜你希望当 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);

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

关于android - Recyclerview - smoothScrollToPosition 到列表顶部,然后动画添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30957674/

相关文章:

android - com.android.ddmlib.InstallException : Failed to install all

java - 如何使用 jsoup 检索标签数据

android - 如何防止我的应用程序在使用 JSON 数据时意外崩溃 "force close"并改为处理异常?

android - 已弃用的 AudioManger.setStreamMute 的替代方案?

android - 列表适配器中的复选框行为异常

android - 多个适配器更新列表项的通用 AsyncTask

android - 适配器类中的 RecyclerView 多个布局 View

android-recyclerview - Android 滚动到 Recyclerview 中的位置不起作用

android - 在 recyclerview 上/外部/顶部添加一个按钮

java - 从自定义适配器(而不是从主 Activity )启动 Intent - 如何在 Activity 结果上实现以重新加载适配器中的 View ?