【问题标题】:How to use DatePickerDialog to set start and end date?如何使用 DatePickerDialog 设置开始和结束日期?
【发布时间】:2019-07-19 02:30:58
【问题描述】:

在我的 Activity 中,我有 2 个 TextView。用户可以点击这些 TextView 来设置开始和结束日期。我正在使用一个 DatePickerDialog,它会在点击 TextViews 时显示。

到目前为止我的代码:

class DatePickerFragment: DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val c = Calendar.getInstance()
        val year = c.get(Calendar.YEAR)
        val month = c.get(Calendar.MONTH)
        val day = c.get(Calendar.DAY_OF_MONTH)
        return DatePickerDialog(activity, activity as DatePickerDialog.OnDateSetListener, year, month, day)
    }
}
class ReportsActivity : AppCompatActivity(), DatePickerDialog.OnDateSetListener {

    override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
        val c = Calendar.getInstance()
        c.set(Calendar.YEAR, year)
        c.set(Calendar.MONTH, month)
        c.set(Calendar.DAY_OF_MONTH, dayOfMonth)
        val dateString = DateFormat.getDateInstance(DateFormat.FULL).format(c.time)

        // need someway to detect if this is for startDate or endDate
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_report)

        startDateTextView.setOnClickListener {
            val datePicker = DatePickerFragment()
            datePicker.show(supportFragmentManager, "start")
        }

        endDateTextView.setOnClickListener {
            val datePicker = DatePickerFragment()
            datePicker.show(supportFragmentManager, "end")
        }
    }
}

我需要一些方法来检测用户是否从 startDateTextView 或 endDateTextView 打开了 DatePickerDialog,以便我可以相应地设置相应的 TextView 的文本。

【问题讨论】:

  • 我认为使用 setOnClickListener 进行检查,它可以解决您的问题。
  • 您可以将值传递给 DatePickerFragment,例如 DatePickerFragment(from:Int) this。

标签: android kotlin datepickerdialog


【解决方案1】:

您可以在 textView onClicklistner 上设置 DateListner。

override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
    val c = Calendar.getInstance()
    c.set(Calendar.YEAR, year)
    c.set(Calendar.MONTH, month)
    c.set(Calendar.DAY_OF_MONTH, dayOfMonth)
    val dateString = DateFormat.getDateInstance(DateFormat.FULL).format(c.time)

    // need someway to detect if this is for startDate or endDate
    updateDisplay();
    updateTextView();
}

private void updateDisplay() {
    ((TextView) touchedView).setText(
        new StringBuilder()
                .append(pad(dayOfMonth)).append(".")
                .append(pad(month)).append(".")
                .append(pad(year)));
}

private void updateTextView() {
    ((EditText) touchedView).setText(
        new StringBuilder()
                .append(pad(dayOfMonth)).append(".")
                .append(pad(month)).append(".")
                .append(pad(year)));
}

在你的 Fragment 中添加 dateListener

     DateListener dateListener = new DateListener(getActivity());

     textView.setOnClickListener(dateListener);

你也可以看到Getting data from a DatePickerDialog to a fragment

【讨论】: