2012-05-14 3 views
2

У меня есть поле EditText. Когда я устанавливаю onClickListener на нем, сначала потребуется фокус на поле, а затем щелчок, чтобы вызвать слушателя. Таким образом, на самом деле это два клика для вызова слушателя. Как я могу исправить это для работы с первого щелчка? Я не хочу устанавливать focusable в false, потому что тогда программа не будет работать.Android EditText setOnClickListener

ответ

5

Как уже говорилось, первое прикосновение фокусирует взгляд, второе касание «щелкает» это. Вместо того, чтобы внедрять OnClickListener, установите OnFocusChangeListener. например

EditText edittext = (EditText)findViewById(R.id.myedittext); 
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if(hasFocus) { 
      //handle your situation here 
     } 
    } 
}); 
+0

Не повезло. :/ – MikkoP

+0

Можете ли вы уточнить? Вы отлаживали? Доходит ли она до части слушателя фокуса? Если да, то не доходит ли он до раздела «порядок обработки» кода при первом щелчке? – kcoppock

+0

Теперь он работает. У вас есть ошибка в коде. onFocus должен быть onFocusChange. Спасибо :) – MikkoP

0

Я не совсем понимаю, что вы подразумеваете под тем, что есть два клика, чтобы вызвать слушателя. Но если метод OnClick вызывается дважды, и вы просто хотите, чтобы код запускался один раз, вы могли бы создать флаг в качестве переменной-члена, который отслеживает, был ли код уже запущен. Например, после инициализации firstTime в true, есть что-то вроде этого в вашем методе onClick:

if (firstTime) { 
    // Put code that you want executed once here 
    firstTime = false; 
} 
else { 
    firstTime = true; // Second time: reset the flag 
} 
+0

Нет, это не проблема. Я должен дважды щелкнуть поле, прежде чем он что-нибудь сделает. – MikkoP

0

поставил

<requestFocus /> 

в вашем EditText в XML. попробовать, может быть полезным для вас

<EditText 
      android:id="@+id/edtTxtEmail1" 
      android:layout_width="240dp" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:inputType="textEmailAddress" 
      android:hint="Email ID" > 
      <requestFocus /> 
     </EditText> 
+0

В противном случае да, но у меня есть несколько входов, которым все это нужно. – MikkoP

1

Когда EditText затрагивается в android, сначала изменяется фокус. OnFocusChangeListener работает в первый раз.

После этого onClickListener работает каждый раз.

Итак, если вы хотите сделать что-то на EditText слушателя, то лучше реализовать setOnTouchListener

Каждый раз, когда он будет работать.

Смежные вопросы