如何知道 EditText 何时失去焦点?

我需要赶上当一个 EditText失去焦点,我已经搜索了其他问题,但我没有找到答案。

我像这样使用 OnFocusChangeListener

OnFocusChangeListener foco = new OnFocusChangeListener() {


@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub


}
};

但是,这对我不起作用。

162376 次浏览

实现 setOnFocusChangeListeneronFocusChange,并且 hasFocus 有一个布尔参数。如果此选项为 false,则会将焦点转移到另一个控件。

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

如果您希望使用这个接口进行因数分解,请让您的 Activity实现 OnFocusChangeListener(), 例如:

public class Shops extends AppCompatActivity implements View.OnFocusChangeListener{

OnCreate中,你可以添加一个监听器,例如:

editTextResearch.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){
doSomethingWith(editTextResearch.getText(),
editTextMyWords.getText(),
editTextPhone.getText());
}
}

这样应该可以了!

工作正常

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


}

Kotlin 的方式

editText.setOnFocusChangeListener { _, hasFocus ->
if (!hasFocus) {  }
}

使用 Java8 lambda 表达式:

editText.setOnFocusChangeListener((v, hasFocus) -> {
if(!hasFocus) {
String value = String.valueOf( editText.getText() );
}
});