2012-01-26 26 views
1

我有两个活动,activity1开始activity2。 在活动2我注册的OnFocusChangeListener到AutoCompleteTextView:在AutoCompleteTextView中的BadTokenException showDropDown()里面的一个监听器

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对象(而不是通过侦听器传递的对象)上执行这两个方法,并得到相同的异常。

我做错了什么?

+0

你知道,当屏幕旋转时,即*默认*您现有的活动被破坏并产生一个新的来代替它? –

+0

是的,但我仍然不明白我想要做什么错。我很新的Android开发.. –

+0

你能解释这个代码有什么问题吗?在配置更改时,活动被破坏并创建一个新活动,然后创建一个新活动并注册一个新的监听器。 –

回答

0

当方向改变了主动性destory并重新创建。由此,由以前的活动情境的上下文创建的自动完成的开放列表将作为活动的缺点而不存在。你必须处理改变你的自我。所以在旋转活动中没有缺点和自动完成列表视图保持不变。

请将此行添加到您的AndroidManifest.xml中的activity标签中。

android:configChanges="orientation|keyboard|keyboardHidden" 

e.g

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

这是一个textview而不是一个打开的对话框 –

+0

请执行并检查它是否适合您。 – Arslan

+0

它的工作原理,谢谢!我是否需要真正关心旋转现在的任何事情,例如充气正确的布局? –

相关问题