5

Always getting this warning TextInputLayout: EditText added is not a TextInputEditText. Please switch to using that class instead. and not finishing Activity for First time. On Second time not getting an warning and activity finishing perfectly.

activity_login.xml

<LinearLayout
        android:id="@+id/ll_login_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center_horizontal"
        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"
        android:visibility="visible">


        <android.support.design.widget.TextInputLayout
            android:id="@+id/email_field"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="16dp"
            android:hint="@string/email_phone"
            android:paddingTop="48dp">

            <android.support.v7.widget.AppCompatEditText
                android:id="@+id/et_email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:inputType="textEmailAddress"
                android:paddingEnd="0dp"
                android:paddingStart="8dp" />

        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/password_field"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/password"
            android:paddingBottom="16dp">

            <android.support.v7.widget.AppCompatEditText
                android:id="@+id/et_password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:inputType="textPassword"
                android:paddingEnd="0dp"
                android:paddingStart="8dp" />

        </android.support.design.widget.TextInputLayout>


        <Button
            android:id="@+id/btn_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="@dimen/button_login_social_margin"
            android:layout_marginStart="@dimen/button_login_social_margin"
            android:layout_marginBottom="@dimen/activity_vertical_margin"
            android:text="@string/login"
            android:textColor="@android:color/black" />

    </LinearLayout>

LoginActivity.java

    public class LoginActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        final AppCompatEditText etEmailOrPh = (AppCompatEditText) findViewById(R.id.et_email);
        final AppCompatEditText etPassword = (AppCompatEditText) findViewById(R.id.et_password);
        final Button btnLogin = (Button) findViewById(R.id.btn_login);

        assert etEmailOrPh != null;
        assert etPassword != null;
        assert  btnLogin != null;

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String emailOrPhone = etEmailOrPh.getText().toString().trim();
                String password = etPassword.getText().toString().trim();

                if(emailOrPhone.isEmpty()){
                    etEmailOrPh.setError(getResources().getString(R.string.email_phone_mandatory));
                    etEmailOrPh.requestFocus();
                } else if(emailOrPhone.contains("@") && CommonUtil.isValidEmail(emailOrPhone)) {
                    etEmailOrPh.setError(getResources().getString(R.string.email_error));
                    etEmailOrPh.requestFocus();
                } else if(password.isEmpty()) {
                    etPassword.setError(getResources().getString(R.string.password_mandatory));
                    etPassword.requestFocus();
                } else {
                    SharedPreferences cache = LoginActivity.this.getSharedPreferences(Constants.SHARED_PREF_NAME, Context.MODE_PRIVATE);
                    final SharedPreferences.Editor preferenceEditor = cache.edit();
                    preferenceEditor.putInt(Constants.SHARED_PREF_ITEM_USER_ID, 1);
                    preferenceEditor.apply();
                    setResult(RESULT_OK);
                    finish();
                }
            }
        });

    }
}

Login Screen

SMR
  • 6,628
  • 2
  • 35
  • 56
Naveen Kumar M
  • 7,497
  • 7
  • 60
  • 74
  • So just use `android.support.design.widget.TextInputEditText` instead of `AppCompatEditText`. Unless there's some reason you're not, that I'm not seeing. – Mike M. Sep 23 '16 at 08:25
  • No I tried already same issue – Naveen Kumar M Sep 23 '16 at 08:38
  • Make sure to change all of them that you have inside a `TextInputLayout`, then clean and rebuild. If the problem persists, you'll need to better explain what exactly you mean by "not finishing Activity". – Mike M. Sep 23 '16 at 08:41
  • @NaveenKumarM see my answer below. – Harshad Pansuriya Sep 23 '16 at 08:44
  • @Ironman the answer I applied it doesn't shown warning. But when I press btnLogin it clears all the text values and not finish() this activity. But the data is saved in shared prefrence. When I try once again the same it will finish this activity. But not every first time. – Naveen Kumar M Sep 23 '16 at 08:50
  • Sorry the activity is opened twice. Now resolved Thank you your solution is working Intent intent = new Intent(MapActivity.this, LoginActivity.class); startActivityForResult(intent, Constants.REQUEST_CODE_LOGIN); startActivity(intent); – Naveen Kumar M Sep 23 '16 at 09:00
  • http://stackoverflow.com/documentation/android/5652/textinputlayout/20044/textinputedittext#t=201609231239581705656 – Gabriele Mariotti Sep 23 '16 at 12:40
  • Thanks Gabriele. I already resolved this issue – Naveen Kumar M Sep 23 '16 at 13:19

2 Answers2

10

Change this EditText

android.support.v7.widget.AppCompatEditText

to this

android.support.design.widget.TextInputEditText

Full Code :

<android.support.design.widget.TextInputLayout
       android:id="@+id/email_field"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:paddingBottom="16dp"
       android:hint="@string/email_phone"
       android:paddingTop="48dp">

    <android.support.design.widget.TextInputEditText
            android:id="@+id/et_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:inputType="textEmailAddress"
            android:paddingEnd="0dp"
            android:paddingStart="8dp"
        />
</android.support.design.widget.TextInputLayout>
Harshad Pansuriya
  • 20,189
  • 8
  • 67
  • 95
  • Warning is cleared but not finishing activity first time. Second time login only able to finish – Naveen Kumar M Sep 23 '16 at 08:44
  • Sorry the activity is opened twice. Now resolved Thank you your solution is working Intent intent = new Intent(MapActivity.this, LoginActivity.class); startActivityForResult(intent, Constants.REQUEST_CODE_LOGIN); startActivity(intent); – Naveen Kumar M Sep 23 '16 at 09:00
  • @NaveenKumarM glad to help you. – Harshad Pansuriya Sep 23 '16 at 09:51
  • If you have updated to sdk-28 and are targeting Android P, then you need to use the android-x package 'com.google.android.material.textfield.TextInputEditText' – Johnny Aug 13 '18 at 11:45
1

Try not using

<android.support.v7.widget.AppCompatEditText

instead use

<EditText

So you will get:

<EditText
            android:id="@+id/et_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:inputType="textEmailAddress"
            android:paddingEnd="0dp"
            android:paddingStart="8dp" />

After doing a bit of research on the issue i found this post:

EditText added is not a TextInputEditText. Please switch to using that class instead

let me know if it helps you.

Vikas Patidar
  • 42,865
  • 22
  • 93
  • 106
Just_someone
  • 1,293
  • 1
  • 11
  • 13