kotlin.TypeCastException: ноль не может быть приведен к непустому типу android.widget.TextView - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь закодировать мое приложение в kotlin , но я получаю null cannot be casted to non-null type, и оно заставляет мое приложение закрываться .я попытался сослаться на другой стековый поток, где они сдвигают инициализацию, но у меня нет никакой части инициализации в моем текущем коде.Будем благодарны за любую помощь Remder_fragment.xml


<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".reminder_fragment"
    android:orientation="vertical">


    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/reminderrecycler"/>



</LinearLayout>

CustomAdapter.kt


class CustomAdapter(val reminderlist: ArrayList<reminders>) :
    RecyclerView.Adapter<CustomAdapter.ViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.reminder_fragment, parent, false)
        return ViewHolder(v);
    }

    override fun getItemCount(): Int {
        return reminderlist.size    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bindItems(reminderlist[position])
    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        fun bindItems(reminders: reminders) {
            val medicineText = itemView.findViewById(R.id.medicineText) as TextView
            medicineText.text = reminders.medicineN

        }

    }
}

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

Вы плохо реализуете RecyclerView .Вы должны иметь отдельный макет для элементов RecyclerView.Вы устанавливаете свой макет элементов RecyclerView, ваш макет, который теперь в нем RecallerView декализовал.

Поэтому Android не может найти ваш TextView с идентификатором MedicineText

Я рекомендуюЧтобы сделать это:

1) Создайте отдельный макет для ваших элементов RecyclerView и надуйте его своему владельцу, как показано ниже:

val v = LayoutInflater.from(parent.context).inflate(R.layout.recylerView_item, parent, false)

2) вставьте TextView в RecylerViewмакет элемента с идентификатором лекарстваТекст

3) Использовать?символ для обработки возможного исключения NullPonterException при объявлении вашего TextView

    val medicineText = itemView.findViewById(R.id.medicineText) as? TextView
0 голосов
/ 27 сентября 2019

Журнал сбоев отсутствует, но похоже, что ошибка исходит от:

val medicineText = itemView.findViewById(R.id.medicineText) as TextView

Подтвердили ли вы, что используете правильный идентификатор просмотра?Похоже, findViewById возвращает ноль.

Кстати.Вы можете использовать привязки kotlin view.Смотрите учебник kotlin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...