9

I have a couple of EditTexts spread in 2 fragments. One of the fragments has the following xml layout:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/cool_button"
        android:gravity="center"
        android:text="@string/user_account"
        android:textAppearance="?android:attr/textAppearanceMediumInverse" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/yellow"
        android:gravity="center"
        android:padding="10dp"
        android:text="@string/registration_description1"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.4"
                android:text="@string/email_address"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textStyle="bold" />

            <EditText
                android:id="@+id/et_email_address"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.6"
                android:ems="10"
                android:hint="@string/required"
                android:inputType="textEmailAddress" >
            </EditText>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <TextView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="0.4"
                android:gravity="center_vertical"
                android:text="@string/email_address_confirmation"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textStyle="bold" />

            <EditText
                android:id="@+id/et_email_address_confirm"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="0.6"
                android:ems="10"
                android:hint="@string/required"
                android:inputType="textEmailAddress" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/tv_title"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.4"
                android:text="@string/title"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textStyle="bold" />

            <Spinner
                android:id="@+id/sp_title"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.6"
                tools:listitem="@android:layout/simple_spinner_dropdown_item" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.4"
                android:text="@string/first_name"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textStyle="bold" />

            <EditText
                android:id="@+id/et_first_name"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.6"
                android:ems="10"
                android:hint="@string/required"
                android:inputType="textCapWords" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.4"
                android:text="@string/surname"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textStyle="bold" />

            <EditText
                android:id="@+id/et_surname"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.6"
                android:ems="10"
                android:hint="@string/required"
                android:imeOptions="actionDone"
                android:inputType="textCapWords" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

And the other layout:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:isScrollContainer="false"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/cool_button"
            android:gravity="center"
            android:text="@string/title_fragment_register_business_and_contact_details"
            android:textAppearance="?android:attr/textAppearanceMediumInverse" />

        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:text="@string/business_name"
                    android:textStyle="bold" />

                <EditText
                    android:id="@+id/et_business_name"
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:hint="@string/required"
                    android:inputType="textCapWords" />
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="match_parent"
                    android:gravity="center_vertical"
                    android:text="@string/street_name_and_number"
                    android:textStyle="bold" />

                <EditText
                    android:id="@+id/et_street1"
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="match_parent"
                    android:hint="@string/required"
                    android:inputType="textCapWords" />
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:text="@string/street2_bigger"
                    android:textStyle="bold" />

                <EditText
                    android:id="@+id/et_street2"
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:inputType="textCapWords" />
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:text="@string/street3_bigger"
                    android:textStyle="bold" />

                <EditText
                    android:id="@+id/et_street3"
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:inputType="textCapWords" />
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:text="@string/street4_bigger"
                    android:textStyle="bold" />

                <EditText
                    android:id="@+id/et_street4"
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:inputType="textCapWords" />
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:text="@string/town_or_city"
                    android:textStyle="bold" />

                <EditText
                    android:id="@+id/et_town"
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:hint="@string/required"
                    android:inputType="textCapWords"
                    android:nextFocusDown="@+id/et_county" />
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:text="@string/county"
                    android:textStyle="bold" />

                <EditText
                    android:id="@+id/et_county"
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:hint="@string/required"
                    android:inputType="textCapWords" />
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_marginTop="10dp" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:text="@string/country"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/textView1"
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:text="@string/united_kingdom" />
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:text="@string/postcode"
                    android:textStyle="bold" />

                <EditText
                    android:id="@+id/et_postcode"
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:hint="@string/required"
                    android:inputType="textCapCharacters" />
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:text="@string/business_tel"
                    android:textStyle="bold" />

                <EditText
                    android:id="@+id/et_business_tel"
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:hint="@string/required"
                    android:imeOptions="actionNext"
                    android:nextFocusDown="@+id/et_business_email"
                    android:inputType="phone" />
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:text="@string/business_email"
                    android:textStyle="bold" />

                <EditText
                    android:id="@+id/et_business_email"
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:imeOptions="actionNext"
                    android:inputType="textEmailAddress"
                    android:nextFocusDown="@+id/et_website" />
            </TableRow>

            <TableRow
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:text="@string/website"
                    android:textStyle="bold" />

                <EditText
                    android:id="@+id/et_website"
                    android:layout_width="0dp"
                    android:layout_weight="0.5"
                    android:layout_height="wrap_content"
                    android:imeOptions="actionDone"
                    android:inputType="textWebEditText" >
                </EditText>
            </TableRow>
        </TableLayout>
    </LinearLayout>

</ScrollView>

When I press next on et_business_tel, it goes to the other fragments EditText. Sometimes it goes to et_email_address_confirm, others it goes to et_first_name. This happens in et_business_email as well. I tried android:nextFocusDown but it doesn't seem to work. Am I doing something wrong or is there a way to point the next button to focus the next editText?

Vancert Staff
  • 205
  • 1
  • 3
  • 12

4 Answers4

13

I used this, it worked for me:

android:imeOptions="actionNext"
android:nextFocusRight="@+id/staff"
Lay Leangsros
  • 9,156
  • 7
  • 34
  • 39
7

android:nextFocusDown="@+id/et_business_email" its go to the next focus edit text

Kaushik
  • 6,150
  • 5
  • 39
  • 54
Mani
  • 930
  • 10
  • 14
  • 2
    Try adding android:imeOptions="actionNext" if it's not working after defining the next focus element – TheIT Jun 30 '16 at 22:31
5

You can decide programatically which is your next editText to focus.

Set OnEditorActionListener to your editText and make the next EditText to request the focus.

    oneEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent event) {

            if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_NEXT || actionId == EditorInfo.IME_ACTION_GO || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                YourOtherEditText.requestFocus();
                return true;
            } else {
                return false;
            }
        }
    });
jDur
  • 1,481
  • 9
  • 10
0

I managed to find a workaround it. I had the second fragment inside a scrollView and when I removed the scrollView, the next buttons started working properly.

Only thing I cant answer is why... Thanks anyways.

Vancert Staff
  • 205
  • 1
  • 3
  • 12
  • If you have two fragments (one on top of the other) with editText fields, the next button on the visible fragment may take focus to the editText on the fields behind it. You should disable the editText fields in the background fragment in onPause(). This is why hiding your scrollView which wrap your editText fields of the first fragment 'solves' your focus issues. Cheers! – portfoliobuilder Apr 01 '16 at 00:34