在侦听器内的AutoCompleteTextView showDropDown()中的BadTokenException

时间:2012-01-26 11:47:15

标签: android

我有两个活动,activity1正在启动activity2。 在活动2中,我将OnFocusChangeListener注册到AutoCompleteTextView:

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

如果我在textview中写了一些内容,然后活动配置发生了变化(屏幕旋转),我得到了WindowManager.BadTokenException。 我把它分离到showDropDown和dismissDropdown方法(通过注释它们)。 我也尝试直接在Activity的View对象上执行这两个方法(而不是通过侦听器传递的那个)并得到相同的异常。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

当方向改变了注意力并再次创造时。通过这种方式,由先前活动上下文的上下文创建的自动完成的开放列表将会破坏,因为活动是破坏性的。你必须处理orientiaon改变你自己。因此,在旋转活动中,不是存活和自动完成列表视图保持不变。

请在活动代码中的AndroidManifest.xml中添加此行。

android:configChanges="orientation|keyboard|keyboardHidden"

例如

<activity
            android:name=".LoginPageActivity"
            android:label="@string/app_name"
            android:screenOrientation = "sensor"
            android:configChanges="orientation|keyboard|keyboardHidden"/>