我对Android开发很陌生,我正在寻找有关我正面临的问题的解释,以便更深入地了解Android。
我有这段代码:
someAutoCompleteTextView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus)
((AutoCompleteTextView)v).showDropDown();
else
((AutoCompleteTextView)v).dismissDropDown();
}
});
如果下拉列表可见且配置发生变化(屏幕方向),我收到BadTokenException。
我知道活动已被销毁,并且创建了一个新活动来替换它,但我不太明白实际发生了什么以及为什么我会得到该异常, 毕竟,创建了一个新活动,新的侦听器注册到新视图,旧的视图被销毁。
我知道我可以通过告诉清单我将自己处理配置更改来解决这个问题,但我正在寻求更深入的理解。
谢谢!
答案 0 :(得分:6)
我认为当你处于横向模式时,并且当聚焦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();
}
});