J'ai la classe ViewHolder suivante pour ma vue 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()
}
}
Mais lorsque j'exécute l'application, une erreur apparaît au dateText.text = listItem.date
en disant,
Java.lang.IllegalStateException: dateText must not be null
at *****.******.*****.ui.detailview.bloodpressure.SummaryListAdapter$ItemViewHolder.update(SummaryListAdapter.kt:68)
Mais le listItem.date
n'est pas nul J'ai vérifié avec le journal.
l'erreur ne concerne pas listItem.date
, l'erreur indique que la vue de texte dateText
dans laquelle vous essayez de définir du texte est nulle,
vérifiez que vous utilisez le bon textview
Possibilités:
1) vous utilisez peut-être un mauvais id
de textview
2) vous avez peut-être utilisé un mauvais fichier lors du gonflage de la vue.
ctrl
+ cliquez sur itemDateSummaryList
et voyez si le textview
provient du même fichier de mise en page que vous avez infate
ou autre
Si vous utilisez des fragments: 1. Utilisez une variable globale qui contiendra votre référence de mise en page
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. Pour utiliser n'importe quelle vue de votre mise en page qui se trouve à l'intérieur de votre mise en page, vous pouvez l'utiliser avec (root.
) comme:
root!!.textView.text="Hello"
Cela signifie que votre vue dateText
elle-même est nulle et non la valeur listItem.date
Vérifiez si vous le rendez correctement, le itemview
a le TextView
avec l'ID auquel vous essayez d'accéder
Je reçois cette erreur mon fragment, j'ai résolu cette erreur,
Code d'erreur:
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)
}
}
}
}
Code de travail:
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)
}
}
}
}
Je viens d'avoir le même problème avec mon RecyclerView. Cela fonctionnait depuis des mois. Après de nombreuses étapes de dépannage infructueuses, j'ai fait un projet Build> Clean et cela a résolu le problème.
Cela peut également se produire sur une référence de contexte incorrecte dans le fichier xml, généralement il apparaît lors du déplacement manuel de l'activité vers un autre package, Android studio n'a pas effectué cette modification automatiquement:
<?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>
La même chose m'est arrivée lors de l'utilisation de Fragment, j'ai pris mon code de onCreateView
et l'ai mis dans la méthode onViewCreated
, le problème a été résolu.