我使用Recyclerview替换列表视图 我想保持Recyclerview始终向下滚动。
ListView可以使用此方法setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL)
RecyclerView我使用方法smoothScrollToPosition(myAdapter.getItemCount() - 1)
但是当软键盘弹出时,它取代了RecyclerView的内容。
答案 0 :(得分:41)
如果您希望将滚动位置固定在RecyclerView
的底部,则它在聊天应用中非常有用。只需在setStackFromEnd(true)
上调用LinearLayoutManager
即可使键盘保持列表项固定在底部(键盘)而不是顶部。
答案 1 :(得分:35)
这是因为RV认为它的参考点是TOP,当键盘出现时,RV的大小由父级更新,RV保持其参考点稳定。 (从而将顶部位置保持在同一位置)
您可以将LayoutManager#ReverseLayout设置为true,在这种情况下,RV将从适配器的末尾布置项目。
e.g。适配器位置0位于底部,1位于其上方等...
这当然要求您颠倒适配器的顺序。
我不确定,但设置stack from end也可能会为您提供与重新排序适配器相同的结果。
答案 2 :(得分:4)
我遇到了同样的问题,我使用here提到的方法解决了这个问题。它用于检测软键盘是否打开,如果它是打开的,只需调用smoothScrollToPosition()
方法。
一个更简单的解决方案是为您的活动的根视图提供一个已知的ID,比如'@ + id / activityRoot',将GlobalLayoutListener挂钩到ViewTreeObserver,然后计算您的活动的视图根和窗口大小之间的大小差异:
final View activityRootView = findViewById(R.id.activityRoot);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
if (heightDiff > 100) {
recyclerView.smoothScrollToPosition(myAdapter.getItemCount() - 1);
}
}
});
容易!
答案 3 :(得分:3)
recyclerView.scrollToPosition(getAdapter().getItemCount()-1);
答案 4 :(得分:0)
我也面临同样的问题。但是下面的代码帮助了我。我希望这很有用。
在这个staus是arraylist。
recyclerView.scrollToPosition(staus.size()-1);
下一个是: - 在此您可以使用适配器类
recyclerView.scrollToPosition(showAdapter.getItemCount()-1);