12

When I touched the EditText inside ListView or RecyclerView the soft keyboard showing. Then i clicked the next button on keyboard and the focus changed to next EditText. After last visible EditText, the focus changing to next EditText but ListView or RecyclerView not scrolling inside and all the screen going under the status bar every keyboard next Button clicked.

The following xml which is using for this screen:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <include
            android:id="@+id/MainToolbar"
            layout="@layout/toolbar" />
        <include
            android:id="@+id/llHeaderItem"
            layout="@layout/TaskShelfShareHeaderItem" />
        <ListView
            android:id="@+id/lwShelfShare"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:stackFromBottom="true"
            android:transcriptMode="normal" />
    </LinearLayout>

Screen cast

Samet KAHRAMAN
  • 147
  • 2
  • 7

2 Answers2

11

I figured it out this way. Hope it helps.

mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {

    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        RecyclerView recyclerView = getRecyclerView();
        if (recyclerView != null) {
            int position = getLayoutPosition();
            RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForLayoutPosition(position + 1);
            if (viewHolder == null) {
                recyclerView.smoothScrollToPosition(position + 1);
                return true;
            }
        }
        return false;
    }
});
Ivan Vazhnov
  • 1,291
  • 11
  • 9
-1

@Ivan Vazhnov

you need to pass the reference of the recyclerView to the adapter, something like

CustomAdapter(data:Object, recyclerView: RecyclerView)

and then inside the adapter onBindViewHolder{}

    try {
        val _recyclerView = recyclerView
        val _VH = _recyclerView.findViewHolderForLayoutPosition(position + 
        if(_VH != null){
        text =_VH.itemView.findViewById<EditText>(R.id.Cantidad)
        text.requestFocus()
        }
        } catch (e: Exception) {
        Log.e("RecyclerView", e.localizedMessage)
    }