我如何操作 TimePickerDialog 中给出的值

问题描述

我最近开始学习 Kotlin,并试图通过开发应用程序来了解更多信息。目前,我一直在尝试输入日期和时间并将其显示在我的应用程序上。

我的 TimePickerFragment 类代码,引用自 Android Developers

class TimePickerFragment : DialogFragment(),TimePickerDialog.OnTimeSetListener {

    var savedHour = 0
    var savedMinute = 0
    var savedDay = "0"


    @RequiresApi(Build.VERSION_CODES.N)
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        // Use the current time as the default values for the picker
        val c = Calendar.getInstance()
        val hour = c.get(Calendar.HOUR_OF_DAY)
        val minute = c.get(Calendar.MINUTE)

        // Create a new instance of TimePickerDialog and return it
        return TimePickerDialog(
            activity,this,hour,minute,DateFormat.is24HourFormat(activity)
        )
    }
    @RequiresApi(Build.VERSION_CODES.N)
    override fun onTimeSet(view: TimePicker,hourOfDay: Int,minute: Int) {

        //avoiding double return
        if (view.isShown) {
            //pass values to be saved
            val c = Calendar.getInstance()
            val date = c.get(Calendar.DAY_OF_MONTH)
            val month = c.get(Calendar.MONTH)
            val year = c.get(Calendar.YEAR)
            savedDay = "$date/$month/$year"
            savedHour = hourOfDay
            savedMinute = minute
            return
        }
    }
}

我的 MainActivity 类,OnCreate 函数

    @RequiresApi(Build.VERSION_CODES.N)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.history_main)

        btnAddReminder.setonClickListener {
            val reminderTitle = etReminder.text.toString()
            // if entry not empty
            if(reminderTitle.isNotEmpty()) {

                showTimePickerDialog(TimePicker(this))

                val reminder = Reminder(reminderTitle)
                val databaseHandler: FeedReaderDbHelper = FeedReaderDbHelper(this)
                // add entry into database

                val status = databaseHandler.addReminder(reminderHistory(0,reminderTitle,TimePickerFragment().savedHour,TimePickerFragment().savedMinute,TimePickerFragment().savedDay))
                if (status > -1) {
                    Toast.makeText(
                        applicationContext,"Reminder added successfully",Toast.LENGTH_LONG
                    ).show()
                }
                etReminder.text.clear()
                // refresh page
                setuplistofDataintoRecyclerView()
            }
        }

        setuplistofDataintoRecyclerView()
    }

在我的 onCreate 函数的这一行中,

val status = databaseHandler.addReminder(reminderHistory(0,TimePickerFragment().savedDay))

我正在尝试将从 TimePickerDialog 接收到的值插入到我的 sqlite 数据库中。但是,我尝试在 onTimeSet 函数中进行的更改不会发生,因为在我完成时间选择之前该项目已更新到我的屏幕上。 (See Picture Attached)

目前,我认为插入的值是我在类 TimePickerFragment 中定义的基础 var。但是,我不确定如何实现值的更改或将值直接导出到我的 MainActivity 类。

我尝试将以下代码转移到 onTimeSet 函数中,但收到 java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.空对象引用上的 widget.EditText.getText()'

val reminder = Reminder(reminderTitle)
                val databaseHandler: FeedReaderDbHelper = FeedReaderDbHelper(this)
                // add entry into database

                val status = databaseHandler.addReminder(reminderHistory(0,Toast.LENGTH_LONG
                    ).show()
                }
                etReminder.text.clear()
                // refresh page
                setuplistofDataintoRecyclerView()

如果您对我的代码或流程有任何意见或建议,我将不胜感激。 谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)