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>