问题描述
我最近开始学习 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 (将#修改为@)