关于配置更改和上下文的活动重新创建的说明

时间:2012-01-27 17:18:57

标签: android

我对Android开发很陌生,我正在寻找有关我正面临的问题的解释,以便更深入地了解Android。

我有这段代码:

someAutoCompleteTextView.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus)
            ((AutoCompleteTextView)v).showDropDown();
        else
            ((AutoCompleteTextView)v).dismissDropDown();
    }       
});

如果下拉列表可见且配置发生变化(屏幕方向),我收到BadTokenException。

我知道活动已被销毁,并且创建了一个新活动来替换它,但我不太明白实际发生了什么以及为什么我会得到该异常, 毕竟,创建了一个新活动,新的侦听器注册到新视图,旧的视图被销毁。

我知道我可以通过告诉清单我将自己处理配置更改来解决这个问题,但我正在寻求更深入的理解。

谢谢!

1 个答案:

答案 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();
    }       
});