我需要为OnFocusChangeListener
实施一次性EditText
。即,一旦EditText
获得焦点,它就会做某事并停止倾听焦点变化事件。
我为我的OnFocusChangeListener
分配了一个空的EditText
。然后在void onFocusChange(View v, boolean hasFocus)
我致电v.setOnFocusChangeListener(null);
它有效,但我想知道为什么可以在自己的方法OnFocusChangeListener
中取消onFocusChange
。我想我从Java内存模型中遗漏了一些东西。
代码如下:
mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
// do something
v.setOnFocusChangeListener(null);
}
}
});
答案 0 :(得分:1)
您可以为其分配新对象,它将从地址29开始指向。但运行的函数来自对象16。
下一次操作系统获得焦点更改时,它们将在内存29处的对象上触发该函数,这将是您最后一次将该函数用于16处的对象。
你所做的是指向null,而不是29,它的工作方式相同。 我希望我解释得很好......