【问题标题】:How to auto scroll down RecyclerViews latest item when Realm db item added如何自动向下滚动 RecyclerView 在 Realm db 项目中添加的最后一项
【发布时间】:2017-08-09 16:06:06
【问题描述】:

我成功地将项目添加到领域数据库并通过适配器填充 Recyclerview 并使用 notifyDataSetChanged() 更新视图。工作正常。

问题是列表填满视图后,新项目出现在滚动空间的下方。我希望更新视图以使最新的项目已经在底部,而用户不必向下滚动,否则他们会错过已添加的新项目。

例如,如果我单击添加 5 个项目,我希望这 5 个项目已经成为屏幕底部的 5 行,不需要滚动。

任何想法如何正确地做到这一点,最好没有黑客来强制滚动?

【问题讨论】:

    标签: android realm


    【解决方案1】:

    在您的notifyDataSetChanged() 致电myList.scrollToPosition(myArray.size - 1); 之后

    here你找到方法文档

    【讨论】:

      【解决方案2】:

      由于某种原因,迄今为止的答案都没有奏效,也许是因为它是 RecyclerView?对于我来说,这是最终可以向下滚动到最新项目的唯一方法,顺便说一句,这是一个 Realm 数据库,但可能是一个列表/数组。

      在 onCreateView 上实例化:

      mLayoutManager = new LinearLayoutManager(getActivity());
      mRecyclerView.setLayoutManager(mLayoutManager);
      

      在 RecyclerView 上正确滚动的命令,在 onChange 上调用

      mLayoutManager.smoothScrollToPosition(mRecyclerView, null, results.size());
      

      我不知道为什么上面的答案 scrollToPositionWithOffset 和 scrollToPosition 在 RecyclerView 上根本不起作用,任何可以解释的人都表示赞赏。

      【讨论】:

        【解决方案3】:

        尝试使用scrollToPositionWithOffset(int position, int offset) 或直接使用scrollToPosition(int position) 如果使用 GridLayoutManager,您可能还需要将 recyclerview 的 LayoutManager 转换为 LinearLayoutManager 例如
        ((LinearLayoutManager)getLayoutManager())

        recyclerView.scrollToPositionWi‌thOffset(listSize - 1, 0);

        【讨论】:

          【解决方案4】:

          你也可以使用

          recyclerview.smoothScrollToPosition(recyclerview.getAdapter().getItemCount());
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多