我是 Android 开发的新手,我正在寻找有关我面临的问题的解释,以便更深入地了解 Android。
我有这段代码:
someAutoCompleteTextView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus)
((AutoCompleteTextView)v).showDropDown();
else
((AutoCompleteTextView)v).dismissDropDown();
}
});
如果下拉列表可见并且配置发生变化(屏幕方向),我将收到 BadTokenException。
我知道该 Activity 已被销毁并创建了一个新 Activity 来替换它,但我不太明白到底发生了什么以及为什么我会收到该异常, 毕竟,创建了一个新的 Activity ,新的听众注册到新的 View ,旧的听众被销毁。
我知道我可以通过告诉 list 我将自己处理配置更改来解决这个问题,但我正在寻求更深入的理解。
谢谢!
最佳答案
我想当您处于横向模式时,并且当 AutoCompleteTextView 获得焦点时,这个可编辑字段会切换到“全屏模式”,即只有值和键盘显示在屏幕上。
所以我猜在这种情况下,下拉菜单永远不可见,这就是 showDropDown() 抛出异常的原因。
为避免这种情况,请在您的代码中添加以下行:
someAutoCompleteTextView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (v.getWindowVisibility() != View.VISIBLE) {
return;
}
if (hasFocus)
((AutoCompleteTextView)v).showDropDown();
else
((AutoCompleteTextView)v).dismissDropDown();
}
});
关于android - 关于配置更改和上下文的 Activity 重新创建的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9037364/