首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当键盘打开时,回收器视图未滚动到结束

当键盘打开时,回收器视图未滚动到结束
EN

Stack Overflow用户
提问于 2015-12-05 16:11:31
回答 9查看 36.5K关注 0票数 62

我在我的应用程序中使用recylerview,每当有新元素添加到recylerview时,它都会滚动到最后一个元素,方法是使用

代码语言:javascript
复制
recyclerView.scrollToPosition(adapter.getCount());

但是,每当键盘打开时(由于editTextView),它会调整视图大小,循环视图变小,但无法滚动到最后一个元素。

代码语言:javascript
复制
android:windowSoftInputMode="adjustResize"

我甚至尝试使用下面的代码来滚动到最后一个元素,但它不起作用

代码语言:javascript
复制
editTextView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus){
                recyclerView.scrollToPosition(chatAdapter.getItemCount());
            }
        }
    });

我可以尝试adjustPan向上移动平移,但它隐藏了我的工具栏。请建议任何解决此问题的方法。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2015-12-05 17:22:55

您可以使用recyclerview.addOnLayoutChangeListener()捕获键盘向上的更改。如果bottom小于oldBottom,则键盘处于up状态。

代码语言:javascript
复制
if ( bottom < oldBottom) { 
   recyclerview.postDelayed(new Runnable() { 
       @Override 
       public void run() {
           recyclerview.smoothScrollToPosition(bottomPosition); 
       }
    }, 100);
}
票数 81
EN

Stack Overflow用户

发布于 2016-08-22 18:21:26

添加以下您的活动或片段:

代码语言:javascript
复制
    if (Build.VERSION.SDK_INT >= 11) {
        recyclerView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v,
                    int left, int top, int right, int bottom,
                    int oldLeft, int oldTop, int oldRight, int oldBottom) {
                if (bottom < oldBottom) {
                    recyclerView.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            recyclerView.smoothScrollToPosition(
                                    recyclerView.getAdapter().getItemCount() - 1);
                        }
                    }, 100);
                }
            }
        });
    }
票数 70
EN

Stack Overflow用户

发布于 2017-02-14 18:33:39

对我来说很管用

代码语言:javascript
复制
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);
票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34102741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档