gpt4 book ai didi

android - 关于配置更改和上下文的 Activity 重新创建的解释

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:32 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com