Java.lang.IllegalStateException: TextView не должен быть нулевым (Android/Kotlin)

У меня есть следующий класс ViewHolder для моего просмотра Recycler,

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

        private val dateText = itemView.itemDateSummaryList
        private val systolicVal = itemView.systolicValue
        private val diastolicVal = itemView.diastolicValue

        fun update(listItem: SummaryListItemModel) {
            Log.i(TAG, "Update method called " + listItem.date)
            dateText.text = listItem.date
            systolicVal.text = listItem.sysVal.toInt().toString()
            diastolicVal.text = listItem.diasVal.toInt().toString()
        }

    }

Но когда я запускаю приложение, ошибка возникает при dateText.text = listItem.date,

java.lang.IllegalStateException: dateText must not be null
at *****.******.*****.ui.detailview.bloodpressure.SummaryListAdapter$ItemViewHolder.update(SummaryListAdapter.kt:68)

Но listItem.date не является нулевым. У меня есть проверка с журналом.

Ответ 1

ошибка не о listItem.date, ошибка говорит о том, что текстовое представление dateText, которое вы пытаетесь установить текст, равно null,

проверьте, что вы используете правильный textview

Возможности:
1), вы можете использовать неправильный id для textview
2), возможно, вы использовали неправильный файл во время раздувания.

ctrl + нажмите itemDateSummaryList и посмотрите, есть ли textview от того же файла макета, который у вас есть infate или иначе

Ответ 2

Он говорит, что ваш вид dateText сам по себе имеет значение null, а не значение listItem.date Проверьте, правильно ли вы его показываете, itemview имеет TextView с идентификатором, с которым вы пытаетесь получить доступ

Ответ 3

Если вы используете фрагменты: 1. Используйте глобальную переменную, которая будет содержать вашу ссылку на макет

private var root: View? = null   // create a global variable which will hold your layout 
 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            root = inflater.inflate(R.layout.your_layout_file_name, container, false)  // initialize it here
            return root
    }

2. Чтобы использовать любой вид вашего макета, который находится внутри вашего макета, вы можете использовать его с (root.) Как:

root!!.textView.text="Hello"

Ответ 4

Я получаю эту ошибку, мой фрагмент, я решил эту ошибку,

Код ошибки:

class MyFragment : Fragment(){

    private var item: Item? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        item = arguments?.getParcelable(BUNLDE_ITEM)
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        item?.let {
            textViewTitle.text = "Text"
        }
        return inflater.inflate(R.layout.my_fragment, null, false)
    }

    companion object {
        private const val BUNLDE_ITEM = "item"
        fun newInstance(item: Item) = MyFragment().apply {
            arguments = Bundle().apply {
                putParcelable(BUNLDE_ITEM, item)
            }
        }
    }
}

Рабочий код:

class MyFragment : Fragment() {

    private var item: Item? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        item = arguments?.getParcelable(BUNLDE_ITEM)
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val root: View = inflater.inflate(R.layout.my_fragment, container, false)
        val textViewTitle = root.findViewById<View>(R.id.textViewTitle) as TextView

        item?.let {
            textViewTitle.text = "text"
        }
        return root
    }

    companion object {
        private const val BUNLDE_ITEM = "item"
        fun newInstance(item: Item) = MyFragment().apply {
            arguments = Bundle().apply {
                putParcelable(BUNLDE_ITEM, item)
            }
        }
    }
}

Ответ 5

То же самое случилось со мной при использовании Fragment, я взял свой код из onCreateView и поместил его в метод onViewCreated, проблема решена.

Ответ 6

У меня была такая же проблема с моим RecyclerView. Это работало в течение нескольких месяцев. После многочисленных неудачных шагов по устранению неполадок я выполнил Build> Clean Project, и проблема была устранена.

Ответ 7

Это также может произойти при неправильной контекстной ссылке в xml файле, обычно это происходит при ручном перемещении Activity в другой пакет, Android-студия не вносила это изменение автоматически:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:tools="http://schemas.android.com/tools"
        ....
        tools:context=".view.ui.login.LoginActivity">
....
</androidx.constraintlayout.widget.ConstraintLayout>