如何在Android中自动向上滚动Recycler视图?

20

我开发了一些聊天应用程序,可以发送和接收消息。但问题是,每当我发送或接收消息时,Recycler View 就无法滚动到顶部,导致消息被显示在键盘上方。

我使用了上面提到的 Recycler View android.support.v7.widget.RecyclerView

7个回答

53

尝试在更新recyclerview时运行此代码:

recyclerView.post(new Runnable() {
    @Override
    public void run() {
        // Call smooth scroll  
        recyclerView.smoothScrollToPosition(adapter.getItemCount() - 1);                                 
    }
});

它将滚动您的RecyclerView到最新添加的项目。 - Nabeel K
谢谢你,Beast。你救了我的一天。 - Midhun Vijayakumar
6
应该是 adapter.getItemCount() - 1。否则滚动得太快,因为滚动距离将基于不存在的项目计算。 - Arthur
3
会很快的。如果我们想要平滑滚动,以便任何人都可以查看ViewGroup中的每个项目,该怎么办? - Anshul Tyagi
3
我们如何实现页面滚动缓慢? - kartheeki j

9
我使用以下代码使滚动条自动滚动到最后一个位置:
recyclerView.smoothScrollToPosition(adapter.getItemCount());

我正在实现向列表中添加新项的功能。


3

尝试以下方法以自动滚动到您的特定位置。

adapter = new DeliveriesDateRecycleAdapter(getActivity(),sampleDatedate, position);
                recyclerviewDates.setAdapter(adapter);
                adapter.notifyDataSetChanged();
                recyclerviewDates.smoothScrollToPosition(position);

注意:position - 您想要显示的列表位置。


1

你尝试过使用RecyclerView.scrollTo(int x, int y)吗?

编辑:在发送或接收最后一条消息后直接尝试RecyclerView.scrollTo(0, 0)


没有,我还没有尝试过。你能举个例子来解释一下吗? - Kalaiselvan
//将第3个项目滚动到距离顶部20像素的位置 linearLayoutManager.scrollToPositionWithOffset(3, 20); - msevgi

0

我正在使用水平的Recycler View和线性布局管理器,但是接受的解决方案对我不起作用。

但是下面的解决方案有效:

(recycler.layoutManager as? LinearLayoutManager)?.scrollToPositionWithOffset(position, 0)

0

如果您想将用户直接带到最新的项目,而无需滚动动画,请使用以下代码:

recyclerView.scrollToPosition(adapter.getItemCount()-1);

0

尝试使用以下方法自动滚动到任何位置...您可以更改“notifyItemChanged”方法的参数。

 public void printer(String message){
    block block=new block();
    block.details=message;

    blocks.add(block);

    blockAdapter.notifyItemChanged(0);
    recyclerView.scrollToPosition(blocks.size()-1);
   // recyclerView.scrollTo(blocks.size()-1,blocks.size());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接