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

2024-01-23

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

我有这段代码:

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

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

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

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

thanks!


我想当您处于横向模式并且 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();
    }       
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐