android - 日期选择器于 1970 年 1 月 1 日重置
问题描述
我的 firebase 实时数据库中有字段date
。
现在例如,如果我输入片段并且不更改日期,则日期更改为:1 Jan 1970
即使之前已安装。
这是我的片段的代码:
class TargetEditFragment : BaseFragment(), View.OnClickListener, TargetEditContract {
private val presenter = TargetEditPresenter(contract = this)
private val safeArgs: TargetEditFragmentArgs by navArgs()
private val targetGuid: String
get() = safeArgs.guid
private var parsedDate: LocalDate? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
presenter.setInitialData(targetGuid)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_target_add, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
presenter.fetchTarget()
setupViews()
}
override fun updateViewsContent(
name: String?,
date: String?
) {
nameEditText?.text = Editable.Factory.getInstance().newEditable(name)
dateView?.text = Editable.Factory.getInstance().newEditable(date)
}
override fun onClick(v: View?) {
presenter.onViewClick(v?.id ?: return, targetGuid)
}
override fun editTarget(targetGuid: String) {
val name = nameEditText?.text.toString().trim()
val date = parsedDate?.atStartOfDay()?.toInstant(ZoneOffset.UTC)?.toEpochMilli() ?: 0L
if (targetGuid.isEmpty()) presenter.addTarget(name, date)
else presenter.updateTarget(name, date)
}
override fun deleteTarget() {
presenter.deleteTarget()
}
override fun closeView() {
findNavController().navigate(R.id.show_list)
}
override fun showWarningDialog() {
activity?.showWarningDialog(description = getString(R.string.warning_description))
}
private fun setupViews() {
showDatePickerDialog()
addActionView?.setOnClickListener(this)
deleteActionView?.setOnClickListener(this)
}
private fun showDatePickerDialog() {
val date = LocalDate.now(ZoneId.systemDefault())
val currentYear = date.year
val currentMonth = date.monthValue
val currentDay = date.dayOfMonth
val dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
pickDate.setOnClickListener {
val datePickDialog = DatePickerDialog(
activity,
R.style.DatePickerDialogTheme,
DatePickerDialog.OnDateSetListener { _, year, month, dayOfMonth ->
val selectedDate = LocalDate.of(year, month + 1, dayOfMonth)
val dateString = selectedDate.format(dateFormatter)
dateView.text = dateString
parsedDate = LocalDate.parse(dateString, dateFormatter)
},
currentYear,
currentMonth - 1,
currentDay
)
datePickDialog.show()
datePickDialog.setOnCancelListener { dialog -> dialog.dismiss() }
}
}
}
更新:我看到那是因为我放了猫王0L
。但它如何修复正确?
如果我不打电话,showDatePickerDialog
我parsedDate
总是会null
。但为了好玩,editTarget
我需要保存日期。
解决方案
我知道那是因为我放了 elvis 0L。但它如何修复正确?
如果我不调用 showDatePickerDialog 我的 parsedDate 将始终为空。但在有趣的编辑目标中,我需要保存日期。
确切地。如果您希望后备不是 1970 年 1 月 1 日,那么您需要设置parsedDate
为应有的任何内容。您说它在 Firebase 实时数据库中,但我没有看到您在任何地方引用该数据库来获取值以便可以适当地设置它。
我的建议是让演示者调用您的数据层以侦听相关实时数据库值的更新,并在您的 Fragment 中有一个回调,该回调会在parsedDate
数据库值更新时更新。
推荐阅读
- excel - 如何比较时间值?
- python - 无法从内部获取文本/数据使用 BeautifulSoup
- python-3.x - 在 minmaxscalar 期间超出最大递归深度
- python - TypeError: 不支持的操作数类型 -: 'generator' 和 'NoneType'
- docker - /bin/sh 返回非零代码:docker alpine 中的 1
- php - Ninja Forms 动作的顺序可以更改吗?
- ios - 有没有办法知道广告设备是安卓还是ios?
- excel - 如何循环 VBA 代码以运行每个列值(20,000 多个单元格)而不使其变慢
- mongodb - 点和美元符号的mongodb含义
- c# - 我正在寻找“滑动阵列”