微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单击一次EditText后显示DatePickerDialog和TimePickerDialog

如何解决单击一次EditText后显示DatePickerDialog和TimePickerDialog

在Androidviewmodel上单击EditText之后,我试图显示DataPickerDialog和TimePickerDialog。

<!-- inside some window or user control -->
<ToggleButton x:Name="tbCasetoggle" />
<custom:TextButtonControl Text="some text" Capitalised="{Binding ElementName=tbCasetoggle,Path=IsChecked}" />

xml(数据绑定)

// fragment

// in TestFragment
// pass the `requireActivity().application` to Textviewmodel

// viewmodel

class Testviewmodel(
    application: Application,) : Androidviewmodel(application) {
    ...
    fun showDateTimeDialog() {
        val currentDateTime = Calendar.getInstance()
        val startYear = currentDateTime.get(Calendar.YEAR)
        val startMonth = currentDateTime.get(Calendar.MONTH)
        val startDay = currentDateTime.get(Calendar.DAY_OF_MONTH)
        val startHour = currentDateTime.get(Calendar.HOUR_OF_DAY)
        val startMinute = currentDateTime.get(Calendar.MINUTE)
        DatePickerDialog(getApplication(),{ _,year,month,day ->
            TimePickerDialog(getApplication(),hour,minute ->
                val pickedDateTime = Calendar.getInstance()
                pickedDateTime.set(year,day,minute)
            },startHour,startMinute,false).show()
        },startYear,startMonth,startDay).show()
    }
}

但是,当我单击此EditText时,它报告一个错误,表明在显示这两个对话框时活动已消失。

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

解决方法

原因是上下文。 对话框的上下文必须是活动而不是应用程序。 将应用程序上下文设置为对话框将导致WindowManger $ BadTokenException。

,
import android.app.Application
import androidx.lifecycle.AndroidViewModel

class TestViewModel(application: Application) : AndroidViewModel(application) {

    private val context = getApplication<Application>().applicationContext  
     ........
} 

然后通过上下文

 fun showDateTimeDialog() {
        val currentDateTime = Calendar.getInstance()
        val startYear = currentDateTime.get(Calendar.YEAR)
        val startMonth = currentDateTime.get(Calendar.MONTH)
        val startDay = currentDateTime.get(Calendar.DAY_OF_MONTH)
        val startHour = currentDateTime.get(Calendar.HOUR_OF_DAY)
        val startMinute = currentDateTime.get(Calendar.MINUTE)
        DatePickerDialog(context,{ _,year,month,day ->
            TimePickerDialog(context,hour,minute ->
                val pickedDateTime = Calendar.getInstance()
                pickedDateTime.set(year,day,minute)
            },startHour,startMinute,false).show()
        },startYear,startMonth,startDay).show()
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?