Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我怎样才能安全地请求FocusChange上的下拉列表,API小于19?_Android_Drop Down Menu_Crash_Screen Orientation_Android Api Levels - Fatal编程技术网

Android 我怎样才能安全地请求FocusChange上的下拉列表,API小于19?

Android 我怎样才能安全地请求FocusChange上的下拉列表,API小于19?,android,drop-down-menu,crash,screen-orientation,android-api-levels,Android,Drop Down Menu,Crash,Screen Orientation,Android Api Levels,我有一个Android应用程序崩溃,当方向改变时(旋转),因为焦点改变试图在AppCompatAutoCompleteTextView上呈现一个下拉列表,它已经丢失了它的父窗口(我想) 原因:android.view.WindowManager$BadTokenException:无法添加 窗口--令牌null无效;你的活动正在进行吗 只有当焦点已在该视图中且方向发生变化时,才会发生此情况。。。当旋转设备(仿真器)时,视图收到焦点更改事件,这让我有点惊讶 所讨论的视图是XML格式的,如下所示:

我有一个Android应用程序崩溃,当方向改变时(旋转),因为焦点改变试图在AppCompatAutoCompleteTextView上呈现一个下拉列表,它已经丢失了它的父窗口(我想)

原因:android.view.WindowManager$BadTokenException:无法添加 窗口--令牌null无效;你的活动正在进行吗

只有当焦点已在该视图中且方向发生变化时,才会发生此情况。。。当旋转设备(仿真器)时,视图收到焦点更改事件,这让我有点惊讶

所讨论的视图是XML格式的,如下所示:

<androidx.appcompat.widget.AppCompatAutoCompleteTextView
    android:id="@+id/dropdown_view"
    android:inputType="textAutoComplete"
    android:selectAllOnFocus="true"/>
可悲的是,我的目标是API 15,我想保留它

我的问题:
请问您有什么想法或建议,如何实现一种保护措施,不要求在已经消失的窗口中呈现下拉菜单(或任何其他内容)?尤其是API级别<19。

您可以使用
ViewCompat.isAttachedToWindow()
,其用途与
view.isAttachedToWindow
相同,但在API<19

   override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        ...
        dropdownView.setOnFocusChangeListener { view, hasFocus ->
            if (hasFocus) {
                editUnitView.showDropDown() //<<< Crash here on rotation, Caused by: android.view.WindowManager$BadTokenException: 
                                            //    Unable to add window -- token null is not valid; is your activity running?
            } else {
                editUnitView.dismissDropDown()
            }
        }
        ...
    }
dropdownView.setOnFocusChangeListener { view, hasFocus ->
    if(view.isAttachedToWindow) { // Requires API 19
        if (hasFocus) {
            editUnitView.showDropDown()
        } else {
            editUnitView.dismissDropDown()
        }
    }
}