Keyboard won't show for EditText inside a ViewPager2 in a DialogFragment

Viewed 183

I have a layout - let's call it layout A - with some EditTexts, which I inflate inside a DialogFragment and all goes well with them. I have another DialogFragment whose layout - let's call it layout B - has a ViewPager2 in it, and I use it with a FragmentStateAdapter which hosts fragments where I reuse layout A for each of them.

Now my problem is that when I tap on the EditTexts inside the ViewPager2, they seem to be getting focus (my grasp of that subject isn't perfect), the cursor starts showing and I can manipulate the text with it ("select", "select all", "cut", etc.), but the soft keyboard won't open up. In the dialog without the viewPager, those same EditTexts work flawlessly and the keyboard opens up.

In the Android Manifest I have android:windowSoftInputMode="adjustPan" (I use a single activity in my app).

What could be the problem?

My code:

Layout A:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:id="@+id/title_text_view"
        android:layout_width="60dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/double_margin"
        android:layout_marginLeft="@dimen/double_margin"
        android:text="@string/title_colon"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="@id/title_edit_text"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@id/title_edit_text" />

    <EditText
        android:id="@+id/title_edit_text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="@dimen/double_margin"
        android:layout_marginRight="@dimen/double_margin"
        android:autofillHints="false"
        android:ellipsize="end"
        android:hint="@string/enter_track_title"
        android:inputType="textCapWords|textMultiLine"
        android:maxLines="2"
        android:textSize="14sp"
        app:layout_constraintBottom_toTopOf="@id/position_edit_text"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/title_text_view"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/position_text_view"
        android:layout_width="60dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/double_margin"
        android:layout_marginLeft="@dimen/double_margin"
        android:text="@string/number_dot"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="@id/position_edit_text"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@id/position_edit_text" />

    <EditText
        android:id="@+id/position_edit_text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/margin"
        android:layout_marginEnd="@dimen/double_margin"
        android:layout_marginRight="@dimen/double_margin"
        android:layout_marginBottom="@dimen/margin"
        android:autofillHints="false"
        android:ellipsize="end"
        android:hint="@string/enter_track_position"
        android:inputType="text"
        android:maxLength="6"
        android:maxLines="1"
        android:textSize="14sp"
        app:layout_constraintBottom_toTopOf="@id/duration_text_view"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/position_text_view"
        app:layout_constraintTop_toBottomOf="@id/title_edit_text"
        tools:ignore="TextFields" />

    <TextView
        android:id="@+id/duration_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/duration_colon"
        android:textStyle="bold"
        android:layout_marginBottom="@dimen/double_margin"
        app:layout_constraintBottom_toTopOf="@id/colon_text_view"
        app:layout_constraintEnd_toEndOf="@id/seconds_picker"
        app:layout_constraintStart_toStartOf="@id/minutes_picker"
        app:layout_constraintTop_toBottomOf="@id/position_edit_text" />

    <NumberPicker
        android:id="@+id/minutes_picker"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/double_margin"
        android:layout_marginLeft="@dimen/double_margin"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/colon_text_view"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/duration_text_view" />

    <TextView
        android:id="@+id/colon_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/margin"
        android:text="@string/colon"
        android:textSize="42sp"
        app:layout_constraintBottom_toBottomOf="@id/minutes_picker"
        app:layout_constraintEnd_toStartOf="@id/seconds_picker"
        app:layout_constraintStart_toEndOf="@id/minutes_picker"
        app:layout_constraintTop_toTopOf="@id/minutes_picker"
        app:layout_constraintVertical_bias="0.42000002" />

    <NumberPicker
        android:id="@+id/seconds_picker"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="@dimen/double_margin"
        android:layout_marginRight="@dimen/double_margin"
        app:layout_constraintBottom_toBottomOf="@id/minutes_picker"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/colon_text_view"
        app:layout_constraintTop_toTopOf="@id/minutes_picker" />


</androidx.constraintlayout.widget.ConstraintLayout>

Layout B:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">

    <View
        android:id="@+id/edit_track_divider_1"
        style="@style/divider"
        android:layout_marginTop="@dimen/double_margin"
        app:layout_constraintBottom_toTopOf="@id/left_arrow"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageButton
        android:id="@+id/left_arrow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/quadruple_margin"
        android:layout_marginLeft="@dimen/quadruple_margin"
        android:layout_marginTop="@dimen/double_margin"
        android:background="@android:color/transparent"
        android:contentDescription="@string/left_arrow_image"
        android:scaleX="1.5"
        android:scaleY="1.5"
        app:layout_constraintBottom_toTopOf="@id/edit_tracks_pager"
        app:layout_constraintEnd_toStartOf="@id/right_arrow"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/edit_track_divider_1"
        app:srcCompat="@drawable/ic_action_left" />

    <TextView
        android:id="@+id/position_header"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        app:layout_constraintBottom_toBottomOf="@id/left_arrow"
        app:layout_constraintEnd_toStartOf="@id/right_arrow"
        app:layout_constraintStart_toEndOf="@id/left_arrow"
        app:layout_constraintTop_toTopOf="@id/left_arrow" />

    <ImageButton
        android:id="@+id/right_arrow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="@dimen/quadruple_margin"
        android:layout_marginRight="@dimen/quadruple_margin"
        android:background="@android:color/transparent"
        android:contentDescription="@string/right_arrow_image"
        android:scaleX="1.5"
        android:scaleY="1.5"
        app:layout_constraintBottom_toBottomOf="@+id/left_arrow"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/left_arrow"
        app:layout_constraintTop_toTopOf="@+id/left_arrow"
        app:srcCompat="@drawable/ic_action_right" />


    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/edit_tracks_pager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toTopOf="@id/edit_track_divider_2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/left_arrow" />

    <View
        android:id="@+id/edit_track_divider_2"
        style="@style/divider"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/edit_tracks_pager" />


</androidx.constraintlayout.widget.ConstraintLayout>
1 Answers

I eventually found some "hackish" unsatisfying way to fix this issue... I have added a dummy EditText in the layout right above the ViewPager2 and set its visibility to gone. Now the EditTexts work as expected - i.e. the keyboard opens up. I have no idea why this works and therefore still don't know what caused the problem. I found this after playing around hopelessly for solutions. If anyone knows what caused the problem, why my solution practically solves it and what is the correct way to solve this - please let me know.

Related