【发布时间】:2019-11-20 15:52:37
【问题描述】:
我的 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 我需要保存日期。
【问题讨论】:
标签: android date kotlin android-datepicker