Мне нужно поймать, когда EditText
теряет фокус, я искал другие вопросы, но я не нашел ответа.
Я использовал OnFocusChangeListener
как этот
OnFocusChangeListener foco = new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
}
};
Но это не работает для меня.
Ответ 1
Внесите onFocusChange
из setOnFocusChangeListener
и там булев параметр для hasFocus. Если это неверно, вы потеряли фокус на другом элементе управления.
EditText txtEdit = (EditText) findViewById(R.id.edittxt);
txtEdit.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
// code to execute when EditText loses focus
}
}
});
Ответ 2
Имейте Activity
Activity
OnFocusChangeListener()
, если вы хотите факторизованное использование этого интерфейса,
Пример:
public class Shops extends AppCompatActivity implements View.OnFocusChangeListener{
В вашем OnCreate
вы можете добавить слушателя, например:
editTextReaserch.setOnFocusChangeListener(this);
editTextMyWords.setOnFocusChangeListener(this);
editTextPhone.setOnFocusChangeListener(this);
тогда студия android предложит вам добавить метод из интерфейса, принять его...
это будет выглядеть так:
@Override
public void onFocusChange(View v, boolean hasFocus) {
// todo your code here...
}
и поскольку у вас есть факторизованный код, вам просто нужно это сделать:
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
editTextReaserch.setText("");
editTextMyWords.setText("");
editTextPhone.setText("");
}
if (!hasFocus){
editTextReaserch.setText("BlaBlaBla");
editTextMyWords.setText(" One Two Tree!");
editTextPhone.setText("\"your phone here:\"");
}
}
все, что вы кодируете в !hasFocus
, предназначено для поведения элемента, который теряет фокус, это должно сделать трюк! Но будьте осторожны, что в таком состоянии изменение фокуса может перезаписать записи пользователя!
Ответ 3
Работает правильно
EditText et_mobile= (EditText) findViewById(R.id.edittxt);
et_mobile.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
// code to execute when EditText loses focus
if (et_mobile.getText().toString().trim().length() == 0) {
CommonMethod.showAlert("Please enter name", FeedbackSubmtActivity.this);
}
}
}
});
public static void showAlert(String message, Activity context) {
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(message).setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
try {
builder.show();
} catch (Exception e) {
e.printStackTrace();
}
}