Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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 DialogFragment.dismise()将键盘留在屏幕上_Android_Kotlin_Keyboard_Dismiss_Dialogfragment - Fatal编程技术网

Android DialogFragment.dismise()将键盘留在屏幕上

Android DialogFragment.dismise()将键盘留在屏幕上,android,kotlin,keyboard,dismiss,dialogfragment,Android,Kotlin,Keyboard,Dismiss,Dialogfragment,我在我的应用程序中观察到一种奇怪的行为,在关闭对话框片段后,屏幕上的键盘在屏幕上徘徊,模糊了活动的UI,尽管活动在我的清单中将android:WindowsofInputMode设置为adjustResize 以下是我所拥有的: 该活动是一个AppCompatActivity 活动的根元素是CoordinatorLayout,它包含一个ScrollView,具有属性android:isScrollContainer=“true” 在我的清单文件中,此活动具有属性android:windowSo

我在我的应用程序中观察到一种奇怪的行为,在关闭
对话框片段
后,屏幕上的键盘在屏幕上徘徊,模糊了活动的UI,尽管活动在我的清单中将
android:WindowsofInputMode
设置为
adjustResize

以下是我所拥有的:

  • 该活动是一个
    AppCompatActivity
  • 活动的根元素是
    CoordinatorLayout
    ,它包含一个
    ScrollView
    ,具有属性
    android:isScrollContainer=“true”
  • 在我的清单文件中,此活动具有属性
    android:windowSoftInputMode=“adjustResize”
  • 该活动具有触发显示
    android.support.v4.app.DialogFragment
    的按钮,其中包含
    AutoCompleteTextView
    元素
  • 当我的对话框及其
    AutoCompleteTextView
    弹出时,键盘本身不会显示,因此我在对话框显示时显式显示键盘,并在关闭对话框之前隐藏键盘
我的问题是键盘隐藏似乎没有正常工作:对话框消失后,键盘保持不变,活动的UI没有调整大小,因此被键盘遮挡,“后退”导航按钮指向左侧而不是向下,好像它认为键盘没有显示。此外,随后在我的活动中点击任何文本框都会导致键盘消失,好像键盘意识到它本来就不应该在那里。当我注释掉
disclose()
调用,并通过单击对话框之外的任何地方来关闭对话框时,我看到键盘正确地离开了,一切正常

DialogFragment类定义的相关代码如下:

 class DualSelectionDialogFragment : DialogFragment() {
    private var input: AutoCompleteTextView? = null
    [...]

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        [...]
        val builder = AlertDialog.Builder(context!!)
        val content = activity?.layoutInflater?.inflate(R.layout.select_dual_mode, null)
        [...]
        input = content?.findViewById<AutoCompleteTextView>(R.id.dual_autocomplete_input)?.apply {
            setAdapter(ArrayAdapter(context, android.R.layout.simple_list_item_1, [...]))
            setOnItemClickListener { _, view, _, _ ->
                [...]
                hideKeyboard(context, this)
                dismiss()
            }
        }
        [...]
        builder.setView(content).setCustomTitle(title)
        return builder.create()
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        dialog.window.setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE +
                WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
    }

    [...]

    fun hideKeyboard(context: Context, view: View) {
        (context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager).hideSoftInputFromWindow(view.windowToken, 0)
    }
}
class DualSelectionDialogFragment:DialogFragment(){
私有变量输入:AutoCompleteTextView?=null
[...]
重写FunonCreateDialog(savedInstanceState:Bundle?:对话框){
[...]
val builder=AlertDialog.builder(上下文!!)
val内容=活动?.LayoutFlater?充气(R.layout.select_dual_mode,null)
[...]
输入=内容?findViewById(R.id.dual\u自动完成\u输入)?。应用{
setAdapter(ArrayAdapter(context,android.R.layout.simple_list_item_1,[…]))
setOnItemClickListener{{,视图,{,}
[...]
隐藏板(上下文,此)
解雇
}
}
[...]
builder.setView(内容).setCustomTitle(标题)
returnbuilder.create()
}
覆盖活动创建的乐趣(savedInstanceState:Bundle?){
super.onActivityCreated(savedInstanceState)
dialog.window.setSoftInputMode(
WindowManager.LayoutParams.SOFT\输入\状态\可见+
WindowManager.LayoutParams.SOFT(输入调整大小)
}
[...]
趣味隐藏板(上下文:上下文,视图:视图){
(context.getSystemService(Activity.INPUT\u METHOD\u SERVICE)作为InputMethodManager)。hideSoftInputFromWindow(view.windowToken,0)
}
}

我在这里做错了什么吗?

我在包含两个editText字段的DialogFragment中遇到了类似的问题。这是在调用
discouse()
之前调用的我的
hideKeyboard
方法:

fun hideKeyboard(dialog: Dialog) {
        val focusedEditTextView = dialog.currentFocus

        val inputMethodManager = (focusedEditTextView?.context?.getSystemService(Context.INPUT_METHOD_SERVICE)) as InputMethodManager

        if (inputMethodManager.isActive) {
            inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS)
        }
    }

这对我来说很有效-在Android 9.1上进行了测试

有趣的是,如果我延迟
disease()
调用,将该行替换为
计时器(“dialogdisease”,false)。schedule(500){disease()}
,这个问题也会消失,这使它看起来非常像线程/并发问题。