如何在不实现 OnFocusChangeListener 的情况下检测 EditText 上的焦点丢失事件
How to detect focus lost event on an EditText without implementing OnFocusChangeListener
我正在使用具有 EditText 的库,我需要检测此 EditText 何时失去焦点。
该库已在此 EditText 上添加了一个 OnFocusChangeListener,因此我无法覆盖此侦听器,因为它会破坏功能。
是否有任何其他方法来检测用户何时失去对 EditText 的关注?
解决方案:
ViewTreeObserver viewTreeObserver = getViewTreeObserver();
viewTreeObserver.addOnGlobalFocusChangeListener(new ViewTreeObserver.OnGlobalFocusChangeListener() {
@Override
public void onGlobalFocusChanged(View oldFocus, View newFocus) {
//oldFocus could be null
if (oldFocus == null || !oldFocus.equals(myEditText)) {
return;
}
doYourThing();
}
});
您可以在 ViewTreeObserver
class 中使用 OnGlobalFocusChangeListener
。它公开了一个方法onGlobalFocusChanged(View oldFocus, View newFocus)
。您只需要检查 oldFocus
是否是您感兴趣的视图。
您可以在此 EditText 上已实现的 OnFocusChangeListener 中传递全局布尔标志。
像布尔值这样的全局变量 isViewOnFocus = false;
并在 OnFocuChangeListener 中更改其值。我相信这个小小的改变不会造成任何问题
我正在使用具有 EditText 的库,我需要检测此 EditText 何时失去焦点。 该库已在此 EditText 上添加了一个 OnFocusChangeListener,因此我无法覆盖此侦听器,因为它会破坏功能。
是否有任何其他方法来检测用户何时失去对 EditText 的关注?
解决方案:
ViewTreeObserver viewTreeObserver = getViewTreeObserver();
viewTreeObserver.addOnGlobalFocusChangeListener(new ViewTreeObserver.OnGlobalFocusChangeListener() {
@Override
public void onGlobalFocusChanged(View oldFocus, View newFocus) {
//oldFocus could be null
if (oldFocus == null || !oldFocus.equals(myEditText)) {
return;
}
doYourThing();
}
});
您可以在 ViewTreeObserver
class 中使用 OnGlobalFocusChangeListener
。它公开了一个方法onGlobalFocusChanged(View oldFocus, View newFocus)
。您只需要检查 oldFocus
是否是您感兴趣的视图。
您可以在此 EditText 上已实现的 OnFocusChangeListener 中传递全局布尔标志。
像布尔值这样的全局变量 isViewOnFocus = false;
并在 OnFocuChangeListener 中更改其值。我相信这个小小的改变不会造成任何问题