Intereting Posts

Кнопка не вызывает OnClickListener с первого щелчка

Я пытаюсь создать страницу входа в систему, где у меня есть имя пользователя, пароль и кнопка. Когда я нажимаю кнопку в первый раз, ничего не происходит, но когда я нажимаю кнопку второй раз, тогда он работает правильно. Я смущен, почему это происходит?

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); } 

Solutions Collecting From Web of "Кнопка не вызывает OnClickListener с первого щелчка"

Вы устанавливаете android:focusableInTouchMode="true" Следовательно, при первом нажатии он получает фокус.

Обратитесь к Android-кнопке. Как настроить фокусировку на истину и все еще принимать onClick-прослушиватель при первом нажатии?

Да, я получил ответ, после большого количества RND, я получил решение, мне просто нужно реализовать setOnClickListener () и setOnFocusChangeListener (). Поэтому я ставил здесь решение.

ActivityLogin.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" /> 

Установите это –

 android:focusableInTouchMode="true" 

к этому –

 android:focusableInTouchMode="false" 

На кнопке.

Объяснение. Если вы сделаете кнопку фокусной, тогда при первом нажатии фокус передается на кнопку, затем клик передается при втором касании. EditText – это фокусный вид, который сначала получает фокус, и поэтому другие виды сначала должны вернуть фокус с помощью EditText, если они не нуждаются в фокусе, чтобы работать, как кнопки. Если вам просто нужна функция OnClick, вам не нужен фокус, поэтому вы можете создать один дополнительный клик.

PS: Хотя это не требуется, но настройка android:focusable to false тоже поможет, если первый не работает.

Если в вашей xml-кнопке или img или макете макета:

 android:focusableInTouchMode="true" 

Чтобы устранить проблему, просто удалите это.

Я предложил использовать фокус запроса в методе onCreate ().

Когда вы используете android:focusableInTouchMode="true" вы можете не хотеть фокуса улавливать поле EditText.

Например: 1. В активном представлении содержится -> android: focusableInTouchMode 2. Вы открываете диалог фрагментации, но кнопка «Назад» нужно дважды щелкнуть, чтобы запустить его. 3. Вы должны вызвать requestFocus () после диалога фрагмента onCreateView ()