Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.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 Edittext正在获得焦点,并在AlertDialog解除后显示键盘_Android_Android Studio_Kotlin_Android Edittext_Android Textinputedittext - Fatal编程技术网

Android Edittext正在获得焦点,并在AlertDialog解除后显示键盘

Android Edittext正在获得焦点,并在AlertDialog解除后显示键盘,android,android-studio,kotlin,android-edittext,android-textinputedittext,Android,Android Studio,Kotlin,Android Edittext,Android Textinputedittext,我在片段和AlertDialog中有一个EditText。我正在使用编辑文本,然后单击完成按钮。但每当我关闭AlertDialog时,Edittext就会获得焦点并显示键盘。我不想在AlerDialog关闭后显示键盘。我如何解决这个问题 在关闭AlertDialog后,我使用val imm=getSystemService(Context.INPUT\u METHOD\u SERVICE)作为InputMethodManager imm.hideSoftInputFromWindow(view

我在片段和AlertDialog中有一个EditText。我正在使用编辑文本,然后单击完成按钮。但每当我关闭AlertDialog时,Edittext就会获得焦点并显示键盘。我不想在AlerDialog关闭后显示键盘。我如何解决这个问题

在关闭AlertDialog后,我使用
val imm=getSystemService(Context.INPUT\u METHOD\u SERVICE)作为InputMethodManager imm.hideSoftInputFromWindow(view.windowToken,0)
,但它不起作用

main.kt

import android.app.AlertDialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.NavDirections
import androidx.navigation.Navigation
import com.martiandeveloper.decisionmaker.R
import com.martiandeveloper.decisionmaker.databinding.DialogOptionBinding
import com.martiandeveloper.decisionmaker.databinding.FragmentMainBinding
import com.martiandeveloper.decisionmaker.viewmodel.MainViewModel
import timber.log.Timber


class MainFragment : Fragment() {

    private lateinit var fragmentMainBinding: FragmentMainBinding

    private lateinit var mainViewModel: MainViewModel

    private lateinit var optionDialog: AlertDialog

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        fragmentMainBinding =
            DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false)
        return fragmentMainBinding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        initUI()
    }

    private fun initUI() {
        mainViewModel = getViewModel()

        fragmentMainBinding.mainViewModel = mainViewModel
        fragmentMainBinding.lifecycleOwner = this

        observe()

        optionDialog = AlertDialog.Builder(context).create()
    }

    private fun getViewModel(): MainViewModel {

        return ViewModelProvider(this, object : ViewModelProvider.Factory {
            override fun <T : ViewModel?> create(modelClass: Class<T>): T {
                @Suppress("UNCHECKED_CAST")
                return MainViewModel() as T
            }
        })[MainViewModel::class.java]

    }

    private fun navigate(navDirections: NavDirections) {
        view?.let { Navigation.findNavController(it).navigate(navDirections) }
    }

    private fun observe() {

        mainViewModel.eventOptionMBTNClick.observe(viewLifecycleOwner, {
            if (it) {
                mainViewModel.setIsOptionDialogShowing(true)
                mainViewModel.onOptionMBTNClickComplete()
            }
        })

        mainViewModel.eventDecideMBTNClick.observe(viewLifecycleOwner, {
            if (it) {
                Timber.i("Decide")
                mainViewModel.onDecideMBTNClickComplete()
            }
        })

        mainViewModel.eventCancelMBTNClick.observe(viewLifecycleOwner, {
            if (it) {
                mainViewModel.setIsOptionDialogShowing(false)
                mainViewModel.onCancelMBTNClickComplete()
            }
        })

        mainViewModel.eventDoneMBTNClick.observe(viewLifecycleOwner, {
            if (it) {
                Timber.i("Done")
                mainViewModel.onDoneMBTNClickComplete()
            }
        })

        mainViewModel.isOptionDialogShowing.observe(viewLifecycleOwner, {
            if (it) {
                showOptionDialog()
            } else {
                if (optionDialog.isShowing) {
                    optionDialog.dismiss()
                }
            }
        })

    }

    private fun showOptionDialog() {
        val binding = DialogOptionBinding.inflate(LayoutInflater.from(context))

        binding.mainViewModel = mainViewModel
        binding.lifecycleOwner = this

        binding.dialogOptionOptionET.requestFocus()

        optionDialog.setView(binding.root)
        optionDialog.setCanceledOnTouchOutside(false)
        optionDialog.setCancelable(false)
        optionDialog.show()

        val window = optionDialog.window
        window?.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or         
        WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)
        window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
    }

}
导入android.app.AlertDialog
导入android.os.Bundle
导入android.view.LayoutInflater
导入android.view.view
导入android.view.ViewGroup
导入android.view.WindowManager
导入androidx.databinding.DataBindingUtil
导入androidx.fragment.app.fragment
导入androidx.lifecycle.ViewModel
导入androidx.lifecycle.ViewModelProvider
导入androidx.navigation.NavDirections
导入androidx.navigation.navigation
导入com.martiandeveloper.decisionmaker.R
导入com.martiandeveloper.decisionmaker.databinding.DialogOptionBinding
导入com.martiandeveloper.decisionmaker.databinding.FragmentMainBinding
导入com.martiandeveloper.decisionmaker.viewmodel.MainViewModel
进口木材
类MainFragment:Fragment(){
私有lateinit var fragmentMainBinding:fragmentMainBinding
私有lateinit var mainViewModel:mainViewModel
私有lateinit变量optionDialog:AlertDialog
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
碎片装订=
数据绑定器充气(充气器,右布局,主容器,假)
返回fragmentMainBinding.root
}
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
initUI()
}
私人娱乐initUI(){
mainViewModel=getViewModel()
fragmentMainBinding.mainViewModel=mainViewModel
fragmentMainBinding.lifecycleOwner=此
遵守
optionDialog=AlertDialog.Builder(context.create())
}
private fun getViewModel():MainViewModel{
返回ViewModelProvider(此对象:ViewModelProvider.Factory{
重写趣味创建(modelClass:Class):T{
@抑制(“未选中的_CAST”)
将MainViewModel()返回为T
}
})[MainViewModel::class.java]
}
私人娱乐导航(导航方向:导航方向){
查看?.let{Navigation.findNavController(it).导航(navDirections)}
}
私人娱乐{
mainViewModel.EventOptions单击.observe(viewLifecycleOwner{
如果(它){
mainViewModel.setIsOptionDialogShowing(真)
mainViewModel.onOptionMBTNClickComplete()
}
})
mainViewModel.eventDecideMBTNClick.observe(viewLifecycleOwner{
如果(它){
木材。我(“决定”)
mainViewModel.onDecideMBTNClickComplete()的
}
})
mainViewModel.eventCancelMBTNClick.observe(viewLifecycleOwner{
如果(它){
mainViewModel.setIsOptionDialogShowing(假)
mainViewModel.onCancelMBTNClickComplete()的
}
})
mainViewModel.eventDoneMBTNClick.observe(viewLifecycleOwner{
如果(它){
i.木材(“完成”)
mainViewModel.onDoneMBTNClickComplete()
}
})
mainViewModel.isOptionDialogShowing.observe(viewLifecycleOwner{
如果(它){
showOptionDialog()
}否则{
如果(可选对话显示){
optionDialog.Disclose()
}
}
})
}
私人娱乐节目选项对话(){
val binding=对话框OPTIONBINDING.FILLATE(LAYOUTIONFLATER.from(上下文))
binding.mainViewModel=mainViewModel
binding.lifecycleOwner=此
binding.dialogOptionOptionET.requestFocus()
optionDialog.setView(binding.root)
optionDialog.setCanceledOnTouchOutside(假)
optionDialog.setCancelable(假)
optionDialog.show()
val窗口=optionDialog.window
window?.clearFlags(WindowManager.LayoutParams.FLAG\u不可聚焦或
WindowManager.LayoutParams.FLAG\u ALT\u FOCUSABLE\u IM)
window?.setSoftInputMode(WindowManager.LayoutParams.SOFT\u输入\u状态\u始终可见)
}
}
fragment_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">

<data>

    <variable
        name="mainViewModel"
        type="com.martiandeveloper.decisionmaker.viewmodel.MainViewModel" />

</data>

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".view.MainFragment">

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/fragment_main_mainTIL"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:textColorHint="@color/woodland"
        app:boxStrokeColor="@color/woodland"
        app:hintAnimationEnabled="false"
        app:hintTextColor="@color/woodland"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/background"
            android:fontFamily="@font/actor"
            android:hint="@string/ask_me_your_question_here"
            android:imeOptions="actionDone"
            android:inputType="text"
            android:text="@={mainViewModel.questionET}"
            android:textColor="@color/apple_white"
            android:textColorHint="@color/woodland" />

    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textview.MaterialTextView
        android:id="@+id/fragment_main_optionsMTV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:fontFamily="@font/actor"
        android:text="@string/options"
        android:textColor="@color/woodland"
        app:layout_constraintEnd_toEndOf="@id/fragment_main_mainTIL"
        app:layout_constraintStart_toStartOf="@id/fragment_main_mainTIL"
        app:layout_constraintTop_toBottomOf="@id/fragment_main_mainTIL" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="16dp"
        app:layout_constraintBottom_toTopOf="@id/fragment_main_buttonsLL"
        app:layout_constraintTop_toBottomOf="@id/fragment_main_optionsMTV">

        <com.google.android.material.textview.MaterialTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/actor"
            android:textColor="@color/apple_white"
            android:textSize="18sp" />

    </ScrollView>

    <LinearLayout
        android:id="@+id/fragment_main_buttonsLL"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">

        <com.google.android.material.button.MaterialButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:backgroundTint="@color/antarctic_deep"
            android:fontFamily="@font/actor"
            android:onClick="@{() -> mainViewModel.onOptionMBTNClick()}"
            android:text="@string/option"
            android:textAllCaps="false"
            android:textColor="@color/apple_white"
            app:cornerRadius="0dp"
            app:icon="@drawable/ic_option"
            app:iconTint="@color/moorland_mist"
            app:strokeColor="@color/woodland"
            app:strokeWidth="1dp" />

        <com.google.android.material.button.MaterialButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:backgroundTint="@color/antarctic_deep"
            android:fontFamily="@font/actor"
            android:onClick="@{()->mainViewModel.onDecideMBTNClick()}"
            android:text="@string/decide"
            android:textAllCaps="false"
            android:textColor="@color/apple_white"
            app:cornerRadius="0dp"
            app:icon="@drawable/ic_decide"
            app:iconTint="@color/moorland_mist"
            app:strokeColor="@color/woodland"
            app:strokeWidth="1dp" />

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

</layout>

dialog_option.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<data>

    <variable
        name="mainViewModel"
        type="com.martiandeveloper.decisionmaker.viewmodel.MainViewModel" />

</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/moorland_mist"
    android:orientation="vertical"
    android:padding="16dp">

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/dialog_option_optionET"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColorHint="@color/woodland"
        app:boxStrokeColor="@color/woodland"
        app:hintAnimationEnabled="false"
        app:hintTextColor="@color/woodland">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/background"
            android:fontFamily="@font/actor"
            android:hint="@string/enter_your_option_here"
            android:imeOptions="actionDone"
            android:inputType="text"
            android:text="@={mainViewModel.optionET}"
            android:textColor="@color/apple_white"
            android:textColorHint="@color/woodland" />

    </com.google.android.material.textfield.TextInputLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:gravity="center"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">

        <com.google.android.material.button.MaterialButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:backgroundTint="@color/antarctic_deep"
            android:fontFamily="@font/actor"
            android:onClick="@{() -> mainViewModel.onCancelMBTNClick()}"
            android:text="@string/cancel"
            android:textAllCaps="false"
            android:textColor="@color/apple_white"
            app:cornerRadius="0dp"
            app:icon="@drawable/ic_cancel"
            app:iconTint="@color/moorland_mist"
            app:strokeColor="@color/woodland"
            app:strokeWidth="1dp" />

        <com.google.android.material.button.MaterialButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:backgroundTint="@color/antarctic_deep"
            android:fontFamily="@font/actor"
            android:onClick="@{()->mainViewModel.onDoneMBTNClick()}"
            android:text="@string/done"
            android:textAllCaps="false"
            android:textColor="@color/apple_white"
            app:cornerRadius="0dp"
            app:icon="@drawable/ic_done"
            app:iconTint="@color/moorland_mist"
            app:strokeColor="@color/woodland"
            app:strokeWidth="1dp" />

    </LinearLayout>

</LinearLayout>

</layout>