Reputation: 609
I have the following ViewHolder class for my Recycler View,
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()
}
}
But when I run the app an error comes up at the dateText.text = listItem.date
saying,
java.lang.IllegalStateException: dateText must not be null
at *****.******.*****.ui.detailview.bloodpressure.SummaryListAdapter$ItemViewHolder.update(SummaryListAdapter.kt:68)
But the listItem.date
is not null I have check with the Log.
Upvotes: 21
Views: 35872
Reputation: 3088
the error is not about listItem.date
, the error says that the dateText
textview to which you are trying to set text is null ,
double check you are using the correct textview
Possibilities :
1) you might be using wrong id
of textview
2) you may have used wrong file while inflating view.
ctrl
+ click on itemDateSummaryList
and see whether the textview
is from the same layout file you have infate
or otherwise
Upvotes: 14
Reputation: 1683
You have look carefully because IN SOME PART OF YOUR CODE you are not referencing the view correctly. In other words, that specific view does not exist in your code.
This will save you hours of looking where is wrong.
Upvotes: 0
Reputation: 8305
If you are using fragments: 1. Use a global variable that will hold your layout reference
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
}
root.
) like:
root?.textView.text="Hello"
Upvotes: 8
Reputation: 33
I read all of these answers but none worked for me so here is my answer.
Find the line of code similar the this:
var view:View?=inflater.inflate(R.layout.fragment_profilefragement, container, false)
Place your cursor on fragement_ProfileFragement
and click with CTRL. Check that you are in the right fragement XML file.
Upvotes: 1
Reputation: 3838
It also might happen on wrong context reference in xml file, usually it appears on manualy moving Activity to another package, Android studio didn't make this change automatically:
<?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>
Upvotes: 2
Reputation: 236
I get this error my fragment, I solved this error,
Error's Code:
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)
}
}
}
}
Working Code:
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)
}
}
}
}
Upvotes: 2
Reputation: 73
I just had the same issue with my RecyclerView. It had been working for months. After numerous unsuccessful troubleshooting steps, I did a Build > Clean Project and it fixed the issue.
Upvotes: 0
Reputation: 7621
The same happened to me while using Fragment, I took my code from onCreateView
and put it to onViewCreated
method, the problem solved.
Upvotes: 2
Reputation: 12953
It's saying your dateText
view itself is null not the value listItem.date
Verify whether you are rendering it correctly, the itemview
has the TextView
with the id you are trying to access
Upvotes: 4