Edittext requestFocus() dynamically not working

2019-07-04 01:19发布

I have multiple Edittexts on action next I have added nextFocus values in the xml.

But one edit text is either visible or invisible based on the state of under age checkbox value. So I need to set focus on it afterr YYYY editext dynammically. But dynamically the requestFocus() is not working.

What I need to do on click of Next

enter image description here

This Email view is visible only when under 18 check box is unchecked.

What happends on next button click after YYYY edittext : control goes to username Edittext. I cant use FocusNext in xml as the app crashes whenever the email textview is GONE

 dobYearEt.setOnEditorActionListener(new EditText.OnEditorActionListener() {

        @Override

        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            Log.i("focus","on yyyy");
            if (actionId == EditorInfo.IME_ACTION_DONE ||
              actionId == EditorInfo.IME_ACTION_NEXT) {
                Log.i("focus",isUnderAge+"");
                if(isUnderAge){
                    username_reg_ev_dob_row.setFocusableInTouchMode(true);
                    username_reg_ev_dob_row.requestFocus();
                }else{
// NOTHING HAPPENS
//                    email_ev.setFocusableInTouchMode(true);
//                    dobYearEt.clearFocus();
                  email_ev.requestFocus();
//                    InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//                    mgr.showSoftInput(email_ev, InputMethodManager.SHOW_IMPLICIT);
                }

                return false;
            }

Xml

  <ScrollView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/register"
                android:layout_marginLeft="@dimen/sign_up_left_right_margin"
                android:layout_marginRight="@dimen/sign_up_left_right_margin"
                android:layout_marginTop="@dimen/sign_up_user_name_top_margin">

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


                    <LinearLayout
                        android:id="@+id/name_container"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal"
                        android:weightSum="3">

                        <EditText
                            android:id="@+id/firstname_ev"
                            style="@style/RegisterViewStyle"
                            android:hint="  FIRST NAME:"
                            android:textCursorDrawable="@null"
                            android:nextFocusForward="@+id/middle_ev"
                            android:nextFocusRight="@+id/middle_ev"
                            android:nextFocusDown="@+id/middle_ev"
                            android:nextFocusLeft="@+id/middle_ev"
                            android:nextFocusUp="@+id/middle_ev"/>

                        <View
                            android:layout_width="@dimen/sign_up_names_sep_width"
                            android:layout_height="wrap_content"/>

                        <EditText
                            android:id="@+id/middle_ev"
                            style="@style/RegisterViewStyle"
                            android:hint="  MIDDLE INITIAL:"
                            android:textCursorDrawable="@null"
                            android:nextFocusForward="@+id/lastname_ev"
                            android:nextFocusRight="@+id/lastname_ev"
                            android:nextFocusDown="@+id/lastname_ev"
                            android:nextFocusLeft="@+id/lastname_ev"
                            android:nextFocusUp="@+id/lastname_ev"/>

                        <View
                            android:layout_width="@dimen/sign_up_names_sep_width"
                            android:layout_height="wrap_content"/>

                        <EditText
                            android:id="@+id/lastname_ev"
                            style="@style/RegisterViewStyle"
                            android:hint="  LAST NAME:"
                            android:textCursorDrawable="@null"
                            android:nextFocusForward="@+id/dob_mm_et"
                            android:nextFocusRight="@+id/dob_mm_et"
                            android:nextFocusDown="@+id/dob_mm_et"
                            android:nextFocusLeft="@+id/dob_mm_et"
                            android:nextFocusUp="@+id/dob_mm_et"
                            />

                    </LinearLayout>

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


                        <CheckBox
                            android:id="@+id/under18_check_box"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:buttonTint="@color/raffle_blue_color"
                            />

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:id="@+id/under18_tv"
                            android:text="I'm under 18 and/or don't have an email?"/>

                    </LinearLayout>

                    <LinearLayout
                        android:id="@+id/dob_parent_layout"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal">
                        <!--android:weightSum="2"-->

                        <LinearLayout
                            style="@style/RegisterViewStyle2"
                            android:id="@+id/dob_container"
                            android:layout_width="0dp"
                            android:layout_height="match_parent"
                            android:layout_marginRight="2dp"
                            android:layout_marginTop="@dimen/sign_up_field_sep_margin"
                            android:layout_weight="1"
                            android:orientation="horizontal">
                            <!--style="@style/RegisterViewStyle2"-->
                            <TextView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:text="DOB:"
                                android:textColor="@color/edit_text_hint_color"
                                android:id="@+id/dob_label_tv"
                                />

                            <!--<EditText-->
                                <!--android:id="@+id/dob_dd_et"-->
                                <!--android:layout_width="wrap_content"-->
                                <!--android:layout_height="wrap_content"-->
                                <!--android:background="@android:color/transparent"-->
                                <!--android:hint="_ _"-->
                                <!--android:textCursorDrawable="@null"-->
                                <!--android:inputType="number"-->
                                <!--android:maxLength="2"-->
                                <!--android:nextFocusForward="@+id/dob_mm_et"-->
                                <!--android:nextFocusRight="@+id/dob_mm_et"-->
                                <!--android:nextFocusDown="@+id/dob_mm_et"-->
                                <!--android:nextFocusLeft="@+id/dob_mm_et"-->
                                <!--android:nextFocusUp="@+id/dob_mm_et"/>-->

                            <EditText
                                android:id="@+id/dob_mm_et"
                                style="@style/RegisterViewStyle"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:background="@android:color/transparent"
                                android:hint="MM"
                                android:textCursorDrawable="@null"
                                android:inputType="number"
                                android:maxLength="2"
                                android:nextFocusForward="@+id/dob_dd_et"
                                android:nextFocusRight="@+id/dob_dd_et"
                                android:nextFocusDown="@+id/dob_dd_et"
                                android:nextFocusLeft="@+id/dob_dd_et"
                                android:nextFocusUp="@+id/dob_dd_et"/>


                            <TextView
                                android:textColor="@color/edit_text_hint_color"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:text=" / "/>

                            <!--<EditText-->
                                <!--android:id="@+id/dob_mm_et"-->
                                <!--android:layout_width="wrap_content"-->
                                <!--android:layout_height="wrap_content"-->
                                <!--android:background="@android:color/transparent"-->
                                <!--android:hint="_ _"-->
                                <!--android:inputType="number"-->
                                <!--android:textCursorDrawable="@null"-->
                                <!--android:maxLength="2"-->
                                <!--android:nextFocusForward="@+id/dob_yyyy_et"-->
                                <!--android:nextFocusRight="@+id/dob_yyyy_et"-->
                                <!--android:nextFocusDown="@+id/dob_yyyy_et"-->
                                <!--android:nextFocusLeft="@+id/dob_yyyy_et"-->
                                <!--android:nextFocusUp="@+id/dob_yyyy_et"/>-->
                            <EditText
                                android:id="@+id/dob_dd_et"
                                style="@style/RegisterViewStyle"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:background="@android:color/transparent"
                                android:hint="DD"
                                android:inputType="number"
                                android:textCursorDrawable="@null"
                                android:maxLength="2"
                                android:nextFocusForward="@+id/dob_yyyy_et"
                                android:nextFocusRight="@+id/dob_yyyy_et"
                                android:nextFocusDown="@+id/dob_yyyy_et"
                                android:nextFocusLeft="@+id/dob_yyyy_et"
                                android:nextFocusUp="@+id/dob_yyyy_et"/>


                            <TextView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:text=" / "
                                android:textColor="@color/edit_text_hint_color"/>


                            <EditText
                                style="@style/RegisterViewStyle"
                                android:id="@+id/dob_yyyy_et"
                                android:layout_width="wrap_content"
                                android:textCursorDrawable="@null"
                                android:layout_height="wrap_content"
                                android:background="@android:color/transparent"
                                android:hint="YYYY"
                                android:inputType="number"
                                android:maxLength="4"
                                />
                            <!--android:nextFocusForward="@+id/email_ev"-->
                            <!--android:nextFocusRight="@+id/email_ev"-->
                            <!--android:nextFocusDown="@+id/email_ev"-->
                            <!--android:nextFocusLeft="@+id/email_ev"-->
                            <!--android:nextFocusUp="@+id/email_ev"-->
                        </LinearLayout>

                        <EditText
                            android:id="@+id/email_ev"
                            style="@style/RegisterViewStyle"
                            android:layout_width="0dp"
                            android:layout_height="match_parent"
                            android:layout_marginTop="@dimen/sign_up_field_sep_margin"
                            android:layout_weight="1"
                            android:hint="  EMAIL:"
                            android:textCursorDrawable="@null"

                            />
                        <!--android:nextFocusForward="@+id/password_reg_ev"-->
                        <!--android:nextFocusRight="@+id/password_reg_ev"-->
                        <!--android:nextFocusDown="@+id/password_reg_ev"-->
                        <!--android:nextFocusLeft="@+id/password_reg_ev"-->
                        <!--android:nextFocusUp="@+id/password_reg_ev"-->
                        <!--style="@style/RegisterViewStyle2"-->
                        <EditText
                            android:id="@+id/username_reg_ev_dob_row"
                            style="@style/RegisterViewStyle"
                            android:layout_width="0dp"
                            android:layout_height="match_parent"
                            android:layout_marginTop="@dimen/sign_up_field_sep_margin"
                            android:layout_weight="1"
                            android:hint="  USERNAME:"
                            android:textCursorDrawable="@null"
                            android:visibility="gone"
                            android:nextFocusForward="@+id/password_reg_ev"
                            android:nextFocusRight="@+id/password_reg_ev"
                            android:nextFocusDown="@+id/password_reg_ev"
                            android:nextFocusLeft="@+id/password_reg_ev"
                            android:nextFocusUp="@+id/password_reg_ev"/>

                    </LinearLayout>

                    <EditText
                        android:id="@+id/username_reg_ev"
                        style="@style/RegisterViewStyle2"
                        android:layout_below="@+id/email_ev"
                        android:layout_marginTop="@dimen/sign_up_field_sep_margin"
                        android:hint="  USERNAME:"
                        android:textCursorDrawable="@null"
                        android:nextFocusForward="@+id/password_reg_ev"
                        android:nextFocusRight="@+id/password_reg_ev"
                        android:nextFocusDown="@+id/password_reg_ev"
                        android:nextFocusLeft="@+id/password_reg_ev"
                        android:nextFocusUp="@+id/password_reg_ev"/>

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

                        <EditText
                            android:id="@+id/password_reg_ev"
                            style="@style/RegisterViewStyle2"
                            android:layout_below="@+id/username_reg_ev"
                            android:layout_marginTop="@dimen/sign_up_field_sep_margin"
                            android:hint="  PASSWORD:"
                            android:layout_marginRight="2dp"
                            android:textCursorDrawable="@null"
                            android:inputType="textPassword"
                            android:nextFocusForward="@+id/confirm_password_reg_ev"
                            android:nextFocusRight="@+id/confirm_password_reg_ev"
                            android:nextFocusDown="@+id/confirm_password_reg_ev"
                            android:nextFocusLeft="@+id/confirm_password_reg_ev"
                            android:nextFocusUp="@+id/confirm_password_reg_ev"/>

                        <EditText
                            android:id="@+id/confirm_password_reg_ev"
                            style="@style/RegisterViewStyle2"
                            android:layout_below="@+id/password_reg_ev"
                            android:layout_marginTop="@dimen/sign_up_field_sep_margin"
                            android:hint="  CONFIRM PASSWORD:"
                            android:textCursorDrawable="@null"
                            android:inputType="textPassword"
                            android:nextFocusForward="@+id/group_code_reg_ev"
                            android:nextFocusRight="@+id/group_code_reg_ev"
                            android:nextFocusDown="@+id/group_code_reg_ev"
                            android:nextFocusLeft="@+id/group_code_reg_ev"
                            android:nextFocusUp="@+id/group_code_reg_ev"/>
                    </LinearLayout>

                    <EditText
                        android:id="@+id/group_code_reg_ev"
                        style="@style/RegisterViewStyle2"
                        android:layout_below="@+id/confirm_password_reg_ev"
                        android:layout_marginTop="@dimen/sign_up_field_sep_margin"
                        android:textCursorDrawable="@null"
                        android:hint="  GROUP CODE(OPTIONAL):"/>

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

                        <CheckBox
                            android:id="@+id/terms_conditions_signup_checkbox"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:buttonTint="@color/raffle_blue_color"
                            />

                        <TextView
                            android:id="@+id/terms_conditions_register_message"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:text="@string/terms_conditions"/>

                    </LinearLayout>

                    <RelativeLayout
                        android:id="@+id/register_btn_rl"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/registration_message"
                        android:layout_marginBottom="6dp"
                        android:layout_marginTop="@dimen/sign_up_btn_top_margin"
                        android:background="@color/raffle_blue_color">

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_centerHorizontal="true"
                            android:layout_centerVertical="true"
                            android:id="@+id/register_tv"
                            android:padding="6dp"
                            android:text="REGISTER"
                            android:textColor="@android:color/white"
                            android:textSize="@dimen/sign_up_edit_text_size"/>
                    </RelativeLayout>
                </LinearLayout>
            </ScrollView>

I have referred to various solutions but nothing is working

Set next EditText focused and editable on KEY_DOWN

requestFocus not working

EditText request focus not working

requestFocus not working

2条回答
家丑人穷心不美
2楼-- · 2019-07-04 02:05

U need two xml attributes also to achieve this:

android:focusable="true"
android:focusableInTouchMode="true"

Add them to the EditText as well as the parent layouts. By default these are false, so the focus is not given to the requested view.

Source: https://developer.android.com/reference/android/view/View.html#attr_android:focusable

After u show the EditText based on the checkbox selection, add the next and previous focus points dynamically in code.

Hope this helps.

查看更多
在下西门庆
3楼-- · 2019-07-04 02:24

What was happening is the I was returning false from onEditorAction- Hence the default editor action was also performed back to back and the focus instantly moved away from the email editText. Now I return true and the deafult action is not performed.Its working correctly now.

dobYearEt.setOnEditorActionListener(new EditText.OnEditor ActionListener() {

        @Override

        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            Log.i("focus","on yyyy");
            if (actionId == EditorInfo.IME_ACTION_DONE ||
              actionId == EditorInfo.IME_ACTION_NEXT) {
                Log.i("focus",isUnderAge+"");
                if(isUnderAge){
                    username_reg_ev_dob_row.setFocusableInTouchMode(true);
                    username_reg_ev_dob_row.requestFocus();
                }else{

                  email_ev.requestFocus();

                }
                  return true ; // NOW WORKS
               // return false;
            }
查看更多
登录 后发表回答