Search code examples
androidlistviewandroid-recyclerviewandroid-softkeyboard

Recyclerview not scrolling to end when keyboard opens


I am using recylerview in my application and whenever new element is added to recyclerview, it scrolls to last element by using

recyclerView.scrollToPosition(adapter.getCount());

But, whenever keyboard opens(because of editTextView), it resizes the view and recyclerview gets smaller, but couldn't scroll to last element.

android:windowSoftInputMode="adjustResize"

I even tried to used the following code to scroll to last element, but it didn't work

editTextView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus){
                recyclerView.scrollToPosition(chatAdapter.getItemCount());
            }
        }
    });

I can try adjustPan to shift the pan up, but it is hiding my toolbar. Please suggest any way to rectify the issue.


Solution

  • You can catch keyboard up changes using recyclerview.addOnLayoutChangeListener(). If bottom is smaller than oldBottom then keyboard is in up state.

    if ( bottom < oldBottom) { 
       recyclerview.postDelayed(new Runnable() { 
           @Override 
           public void run() {
               recyclerview.smoothScrollToPosition(bottomPosition); 
           }
        }, 100);
    }