如何在 Kotlin 中使用日期选择器为 EditText 设置文本



我是 Kotlin 和 android 应用程序开发的新手。

我正在参加在线课程,其中一个练习是选择日期以在特定时间提醒待办事项。

我所做的是创建EditText并实现DatePicker。当用户单击日期选择器打开并且选择日期后,我无法设置为EditText的文本。

顺便说一句,我已经检查了其他相关问题,它说检查您的 ID 以确保您在正确的布局文件中引用非空小部件。我仔细检查了一下,这不是问题

这是错误。

尝试在空对象引用上调用虚拟方法 'void android.widget.EditText.setText(java.lang.CharSequence('

//EditText on layout file
<EditText
    android:id="@+id/calendarEditText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:hint="Select your date"
    android:focusable="false"
/>
//My Kotlin code
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_add)
    //DatePicker is called inside onCreate function
    calendarEditText.setOnClickListener {
        val newFragment = DatePickerFragment()
        newFragment.show(supportFragmentManager, "datePicker")
    }
}
// DateSet part of my DatePickerFragment
override fun onDateSet(view: DatePicker, year: Int, month: Int, dayOfMonth: Int) {
    //selected date converted into one string
    val date = "$year/$month/$dayOfMonth"
    //this is where I got the error
    calendarEditText.setText(date)
}
对我来说,

calendarEditText 是空的,因为你在 DatePickerFragment 中调用它,所以你处于不同的上下文中。

在您的 onDataSet 中,像这样更新编辑文本:

((MyActivity) activity).setEdt(date);

在您的活动中,类似这样:

public setEdt(date: String): void {
calendarEditText.setText(date)
}

或遵循此图托以避免碎片

birthdate.setOnClickListener {

        val c = Calendar.getInstance()
        val year = c.get(Calendar.YEAR)
        val month = c.get(Calendar.MONTH)
        val day = c.get(Calendar.DAY_OF_MONTH)
        val datePickerDialog = DatePickerDialog(
            this, { view, year, monthOfYear, dayOfMonth ->
                val c1 = Calendar.getInstance()
                c1.set(year, monthOfYear, dayOfMonth);
                val simpleDateFormat = SimpleDateFormat("dd/MM/yyyy")
                var strDate = simpleDateFormat.format(c1.time)
                birthdate.setText(strDate)
            }, year, month, day
        )
        datePickerDialog.show()
    }
  <EditText
        android:id="@+id/birthdate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusable="false"/>

最新更新