如何判断 EditText 何时完成初始化?
How to determine when EditText has completed its initialization?
我有一个自定义 EditText
,我会覆盖 onSelectionChange
以在光标位置发生变化时通知观察者。 There is a little delay to prevent notifying too often when selection is changing rapidly (backpressure).
private static final long POST_SELECTION_CHANGED_DELAY = 500;
private Runnable mSelectionRunnable = new Runnable() {
@Override
public void run() {
if (mSelectionListener != null) {
mSelectionListener.onSelectionChanged();
}
}
};
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
super.onSelectionChanged(selStart, selEnd);
postSelectionChanged();
}
private void postSelectionChanged() {
removeCallbacks(mSelectionRunnable);
postDelayed(mSelectionRunnable, POST_SELECTION_CHANGED_DELAY);
}
问题是在 EditText
初始化阶段 onSelectionChanged
至少被引发一次并且通知我的观察者,即使它不是已经需要的。我尝试在延迟 1 秒后附加监听器,但这对我来说似乎很老套。
那么,有没有办法知道 EditText
初始化何时完成,以便我可以将我的侦听器附加到那里?我已经试过了 onAttachedToWindow
但现在太早了。
也许重写 onFocusChanged 方法?
override fun onFocusChanged(focused: Boolean, direction: Int, previouslyFocusedRect: Rect?) {}
因此您可以检测 EditText 是否获得焦点,然后继续您的自定义逻辑
我有一个自定义 EditText
,我会覆盖 onSelectionChange
以在光标位置发生变化时通知观察者。 There is a little delay to prevent notifying too often when selection is changing rapidly (backpressure).
private static final long POST_SELECTION_CHANGED_DELAY = 500;
private Runnable mSelectionRunnable = new Runnable() {
@Override
public void run() {
if (mSelectionListener != null) {
mSelectionListener.onSelectionChanged();
}
}
};
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
super.onSelectionChanged(selStart, selEnd);
postSelectionChanged();
}
private void postSelectionChanged() {
removeCallbacks(mSelectionRunnable);
postDelayed(mSelectionRunnable, POST_SELECTION_CHANGED_DELAY);
}
问题是在 EditText
初始化阶段 onSelectionChanged
至少被引发一次并且通知我的观察者,即使它不是已经需要的。我尝试在延迟 1 秒后附加监听器,但这对我来说似乎很老套。
那么,有没有办法知道 EditText
初始化何时完成,以便我可以将我的侦听器附加到那里?我已经试过了 onAttachedToWindow
但现在太早了。
也许重写 onFocusChanged 方法?
override fun onFocusChanged(focused: Boolean, direction: Int, previouslyFocusedRect: Rect?) {}
因此您可以检测 EditText 是否获得焦点,然后继续您的自定义逻辑