El botón no está llamando a OnClickListener con el primer clic

Estoy tratando de desarrollar una página de inicio de sesión , donde tengo nombre de usuario, contraseña y un botón. Cuando hago clic en el botón por primera vez, no pasa nada, pero cuando hago clic en el botón por segunda vez, entonces funciona correctamente. Estoy confundido, ¿por qué está sucediendo?

Activity_login.xml

<RelativeLayout 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:background="@drawable/splash_bg" tools:context=".LoginActivity" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:orientation="vertical" android:layout_margin="30dp" > <EditText style="@style/EditText1" android:id="@+id/userEditText" android:layout_marginBottom="50dp" android:inputType="textNoSuggestions" android:singleLine="true" android:hint="username" /> <EditText style="@style/EditText1" android:id="@+id/passEditText" android:inputType="textPassword" android:layout_marginBottom="50dp" android:hint="password" /> <Spinner android:id="@+id/locationSpinner" android:layout_width="match_parent" android:layout_height="wrap_content" android:popupBackground="#ffffff" style="@style/EditText1" android:layout_marginBottom="50dp" /> <Button style="@style/Button1" android:focusable="true" android:focusableInTouchMode="true" android:onClick="onLoginClick" android:text="continue" /> 

LoginActivity.java

  @SuppressLint("DefaultLocale") public void onLoginClick(View view) { String username = mUserEditText.getText().toString(); String password = mPassEditText.getText().toString(); String location = mLocationData.get( mLocationSpinner.getSelectedItemPosition()).toLowerCase(); if (username.isEmpty() || password.isEmpty()) { CreatorMessenger .getInstance() .showMessage(this, "Error!!", "You need to enter username and password both to continue!!"); return; } User user; user = new User(username);/* * } */ user.setLocation(location); AppManager.getInstance().setLoggedInUser(user); APICaller.getInstance().login(username, password, location); } 

5 Solutions collect form web for “El botón no está llamando a OnClickListener con el primer clic”

Estás estableciendo android:focusableInTouchMode="true" Por lo tanto, en el primer clic que recibe el enfoque.

Referir el botón de Android – ¿Cómo establecer focusable a true y todavía aceptar onClick oyente en el primer clic?

Sí Sí Tengo la respuesta, después de un montón de RND, tengo la solución, sólo tengo que implementar setOnClickListener (), y setOnFocusChangeListener (). Así que estoy poniendo aquí la solución.

ActividadLogin.java

  buttonLogin= (Button) findViewById(R.id.buttonLogin); buttonLogin.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.d("hello", "hellow"); String username = mUserEditText.getText().toString(); String password = mPassEditText.getText().toString(); String location = mLocationData.get(mLocationSpinner.getSelectedItemPosition()).toLowerCase(); if(username.isEmpty()||password.isEmpty()){ popbox(); return; } User user; user = new User(username); user.setLocation(location); AppManager.getInstance().setLoggedInUser(user); APICaller.getInstance().login(username, password, location); } }); buttonLogin.setOnFocusChangeListener(new View.OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { v.performClick(); } } }); } 

Activity_login.xml

  <Button android:id="@+id/buttonLogin" style="@style/Button1" android:text="continue" /> 

Establecer esto –

 android:focusableInTouchMode="true" 

a esto –

 android:focusableInTouchMode="false" 

En el botón.

Explicación – Si haces que el botón se pueda enfocar, entonces en el primer clic el foco se pasa al botón, entonces el clic es pasado en el segundo toque. EditText es una vista focusable que obtiene el foco primero y por lo tanto otras vistas primero deben recuperar el foco de EditText, a menos que no necesiten el foco para trabajar, apenas como botones. Si sólo necesita la función OnClick, entonces no necesita foco, por lo que puede spre un clic extra.

PS: Aunque no debería requerir, pero la configuración de android:focusable a false también ayudará, si el primero no funciona.

Si en su xml en el botón, o img, o la disposición del trazador de líneas tiene:

 android:focusableInTouchMode="true" 

Para resolverlo, solo elimínalo.

Sugerí utilizar el enfoque de solicitud en el método "onCreate ()".

Cuando usa android:focusableInTouchMode="true" puede que no quiera capturar el foco por un campo 'EditText'.

Por ejemplo: 1. Una actividad tiene una vista contiene -> android: focusableInTouchMode 2. Usted abre un cuadro de diálogo de fragmentos, pero el botón de nuevo tiene que hacer clic dos veces para disparar. 3. Debe llamar a requestFocus () después de la ventana de diálogo de fragmentos onCreateView ()

  • Carrera que no se superpone a la forma
  • ¿Es posible acceder a un elemento de string-array en Android?
  • Color de sombra en los botones dependiendo del estado en XML - Android
  • Ignorar elementos no está permitido aquí, en Android lint.xml
  • Android utilizando diseños como una plantilla para crear múltiples instancias de diseño
  • SurfaceView personalizado que causa NoSuchMethodException
  • Obtener el id de una vista como String en el evento onClick
  • Android define la forma XML como dibujable mediante programación
  • Botón con diseño XML personalizado
  • Cómo configurar la altura máxima de un Layout en android?
  • ¿Es posible tener más de un archivo de recursos de cadena en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.