我需要爲我的EditText
實施一次性OnFocusChangeListener
。也就是說,一旦EditText
獲得焦點,它就會執行某些操作並停止收聽焦點更改事件。Android上的EditText的一次性OnFocusChangeListener
我給我的EditText
分配一個ananymous OnFocusChangeListener
。然後在void onFocusChange(View v, boolean hasFocus)
我打電話v.setOnFocusChangeListener(null);
它的工作原理,但我想知道爲什麼它有可能在其自己的方法onFocusChange
OnFocusChangeListener
爲空。我想我錯過了Java內存模型的一些東西。
的代碼如下:
mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
// do something
v.setOnFocusChangeListener(null);
}
}
});
據我所知,你認爲這不會導致循環。 'EditText'實現'OnFocusChangeListener'接口。您首先設置偵聽器,然後刪除該偵聽器。爲什麼會有問題? – azizbekian
@azizbekian,正如我從https://developer.android.com/reference/android/widget/EditText.html看到的,'EditText'沒有實現'OnFocusChangeListener' –
我的錯。 'View'中有一個靜態的內部類,叫做'ListenerInfo',它保留了這個監聽器。 [源代碼](https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/View.java#L3566) – azizbekian