Как установить текст для EditText с помощью средства выбора даты в Котлине

Я новичок в разработке приложений для Kotlin и Android.

Я прохожу онлайн-курс, и одним из упражнений является выбор даты, чтобы напомнить о том, что нужно сделать в определенное время.

Что я сделал, так это создал EditText и реализовал DatePicker. Когда пользователь щелкает окно выбора даты, открывается, и после того, как я выбираю дату, я не могу установить текст EditText.

Кстати, я уже проверил другие связанные вопросы, и он говорит, что проверьте свой идентификатор, чтобы убедиться, что вы имеете в виду ненулевой виджет в правильном файле макета. Я дважды проверил это, и это не проблема

Вот ошибка.

Попытка вызвать виртуальный метод «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)
}

person sinan    schedule 15.07.2019    source источник
comment
Попробуйте использовать findViewById().   -  person Nurbol    schedule 15.07.2019
comment
Спасибо за предложение, но в Котлине вам не нужен findViewById(), и он уже проверен в предыдущих строках, напрямую вызывая идентификатор   -  person sinan    schedule 15.07.2019


Ответы (1)


для меня calendarEditText имеет значение null, потому что вы вызываете его в DatePickerFragment, поэтому вы находитесь в другом контексте.

В вашем onDataSet обновите текст редактирования следующим образом:

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

и в вашей деятельности что-то вроде этого:

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

или следуйте этому tuto, чтобы избежать фрагментации

person Turvy    schedule 15.07.2019