2015-04-30 7 views
0

Я пытаюсь последовательно вызвать определенную функцию при нажатии EditText. Проблема в том, что если я реализую onClick, то onClick не будет вызван при первом щелчке EditText и когда я добавлю onFocusChange, чтобы исправить это, слушатель, который был добавлен после этого в тот же EditText, похоже, не работает. Пользователь должен также иметь возможность вводить текст в EditText после фокусировки или щелчка по нему. OnTextChanged не вариант. У вас даже есть два таких слушателя?Android onFocusChange AND onClickListener

Я установил переменную receiverEditText в onCreateView и вызвал addListeners в onResume.

Java:

public void addListeners() 
    { 
     receiverEditText.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       doTheThingFunction(); 
      } 
     }); 

     View.OnFocusChangeListener listener = new View.OnFocusChangeListener() 
     { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) 
      { 
       doTheThingFunction(); 
      } 
     }; 
     receiverEditText.setOnFocusChangeListener(listener); 
    } 

XML:

<EditText 
      android:id="@+id/messageReceiver" 
      android:layout_width="match_parent" 
      android:layout_height="35dp" 
      android:padding="3dp" 
      android:hint="@string/recipient" 
      android:focusableInTouchMode="true" 
      android:focusable="true"> 
      <requestFocus /> 
</EditText> 

ответ

1

@Waltari Я создал демо, чтобы проверить фокус состояние некоторых edittextview. Проверить код.

Используйте это в onCreate() деятельности.

EditText messageReceiver = (EditText) findViewById(R.id.messageReceiver); 

     messageReceiver.setOnFocusChangeListener(new OnFocusChangeListener() { 

      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (hasFocus) { 
        Toast.makeText(getApplicationContext(), "Focus gained", 1) 
          .show(); 
       } else { 
        Toast.makeText(getApplicationContext(), "Focuse released", 
          1).show(); 
       } 
      } 
     }); 

В вашем XML файл

<EditText 
     android:id="@+id/messageReceiver" 
     android:layout_width="match_parent" 
     android:layout_height="35dp" 
     android:hint="recipient" 
     android:padding="3dp" > 
    </EditText> 

    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="35dp" 
     android:hint="recipient" 
     android:padding="3dp" > 
    </EditText> 

Это дает мне сосредоточиться релиз усиления событий MessageReceiver.

Focuse будет получен, если вы укажете курсор на Edittext с идентификатором «messageReceiver», и когда вы нажмете еще один редактор, чем вызван фокус, выпущенный из «messageReceiver».

Значит, вам нужно управлять выпуском фокуса, когда вы работаете.

+0

Я пробовал ваш код, но он по-прежнему не работает с прослушивателем onClick. Я также хочу вызвать функцию на слушателе onClick, а также в изменении onFocus. – Waltari

+0

Могу ли я узнать, почему вы хотите прослушивать клик в редакторе Edittext? Вы можете использовать textWatcher. –

+0

Вы можете вызвать функцию в усилении фокусировки, которую вы хотите выполнить onClick. –