我使用recyclerview在聊天窗口中显示消息。但是,当编辑新消息时,回收器视图的焦点应该放在最后一个元素上。我希望有一些方法可以将回收观的重点转移到最后一个元素,而不是第一个元素。
使用recyclerView.smoothScrollToPosition(position);
位置
是插入的最后一个项目的索引。这将把RecyclerView
的焦点转移到最后一个元素上。
Use可以在LinearLayoutManager对象上添加两行中的任何一行,以将回收视图滚动到底部。。。
llm.setStackFromEnd(true);
或
llm.setReverseLayout(true);
使用
recyclerView.smoothScrollToPosition(position)
adapter.notifyDataSetChanged();
其中position是最后一个元素的索引
recyclerView.getAdapter().getItemCount()-1
使用这个来获取最后一个元素。
这对我很有效。
有两种方法可以实现。
1:当您为RecyclerView创建任何LayoutManager时,将其构造函数中的最后一个参数设为true
。
LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this,LinearLayoutManager.HORIZONTAL,true);
2:只需告诉RecyclerView滚动到最后一个位置。
recyclerView.smoothScrollToPosition(lastPosition);
使用layoutManager.setStackFromEnd(true);
而不是这个。
样本
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
RecyclerView recyclerView = findViewById(R.id.list);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);
确保此位置是要查看的项目的位置。
recyclerView.smoothScrollToPosition(position);
您可以简单地使用以下代码。此处recyclerView.getBottom()定义要成为焦点的位置
recyclerView.smoothScrollToPosition(recyclerView.getBottom());
在Kotlin中使用以下代码
binding.recyclerViewMessage.smoothScrollToPosition(if (list.size > 1) list.size - 1 else list.size);
这是完美的
您可以在回收器视图中使用app:stackFromEnd="true"XML代码,如:
<android.support.v7.widget.RecyclerView
android:id="@+id/message_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/message_input"
android:layout_alignParentTop="true"
app:stackFromEnd="true" />