【问题标题】:Recyclerview fully scroll to positionRecyclerview 完全滚动到位置
【发布时间】:2016-12-07 08:47:39
【问题描述】:

我的 recyclerview 应该打开第一个关闭的项目。为此,我写了这几行。

 LinearLayoutManager llm = new LinearLayoutManager(getActivity());
 llm.scrollToPosition(1);
 paletteRecyclerView.setLayoutManager(llm);

我想检查是否可以完全滚动到位置 1。如果我的 recyclerview 很小,我必须在不关闭第一项的情况下打开它。如何查看?

【问题讨论】:

  • 检查 recyclerView.getHeight() > recyclerView.computeVerticalScrollRange 是否为真,则不要滚动到位置 1。
  • 我检查了这两个参数返回0。可能是什么原因?

标签: android scroll android-recyclerview linearlayoutmanager


【解决方案1】:

我假设您想知道 RecyclerView 中是否有要滚动的项目。所以你可以在将适配器设置为recyclerView后进行如下检查。

recyclerView.post(new Runnable() {
        @Override
        public void run() {
            int recyclerViewheight = recyclerView.getHeight();
            int totalChildViewsHeight = recyclerView.computeVerticalScrollRange();
            if (recyclerViewheight > totalChildViewsHeight) {
                //there is no scroll (there are no more items to scroll)
            } else {
                //there is scroll (there are items to scroll)
            }
        }
    });

【讨论】:

  • 我检查了这两个参数返回0。可能是什么原因?
  • 您是在recyclerView.post() 上并在设置适配器之后这样做吗?
  • 不,为什么我必须做 recyclerView.post()?
  • 因为在你调用的时候,recyclerView 不会在屏幕上渲染,所以你无法获取高度。如果在post()上做,runnable中的操作会在渲染后的下一个pass中完成。
  • 非常感谢您的帮助:)
【解决方案2】:

试试下面的代码...

LinearLayoutManager llm = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(llm);

RecyclerView.Adapter adapter = new YourAdapter();
recyclerView.setAdapter(adapter);

recyclerView.scrollToPosition(position);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    相关资源
    最近更新 更多