gpt4 book ai didi

java - Android 上 EditText 的一次性 OnFocusChangeListener

转载 作者:行者123 更新时间:2023-11-30 06:52:39 26 4
gpt4 key购买 nike

我需要为我的 EditText 实现一次性 OnFocusChangeListener。即,一旦 EditText 获得焦点,它就会执行某些操作并停止监听焦点更改事件。

我将一个任意的 OnFocusChangeListener 分配给我的 EditText。然后在 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);
}
}
});

最佳答案

不要 panic ,你无法伤害该物体。View对象中有 protected OnFocusChangeListener mOnFocusChangeListener。假设它指向你内存中的地址 16。

您可以为其分配新对象,并且它将开始指向地址 29 处。但是运行的函数来自对象 16。

下次操作系统获得焦点变化时,它们将在内存 29 处的对象处触发该函数,在某种程度上,这将是您最后一次对 16 处的对象使用此函数。

你所做的是指向 null,而不是 29,它的工作原理是一样的。我希望我解释得很好......

关于java - Android 上 EditText 的一次性 OnFocusChangeListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42442104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com