我的Recycler View有以下ViewHolder类,
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
不为空我已经检查了日志。
答案 0 :(得分:5)
错误不是listItem.date
,错误表示您尝试设置文本的dateText
文本视图为空,
仔细检查您是否使用了正确的textview
可能性:
1)您可能使用id
textview
的错误ctrl
2)您在浏览视图时可能使用了错误的文件。
itemDateSummaryList
+点击textview
,查看infate
是否来自同一个布局文件fitness
或其他
答案 1 :(得分:4)
它说dateText
视图本身为空而不是值listItem.date
验证您是否正确呈现它,itemview
有TextView
您尝试访问的ID
答案 2 :(得分:2)
如果您正在使用片段: 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"
答案 3 :(得分:1)
我收到此错误是我的片段, 我解决了这个错误,
错误代码:
StreamBuilder<UnmodifiableListView<Article>> (
initialData: UnmodifiableListView<Article>([]),
stream: widget.hnBloc.article,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView(
children: snapshot.data.map(_buildItem).toList(),
);
} else {
return CircularProgressIndicator();
}
}
),
工作代码:
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)
}
}
}
}
答案 4 :(得分:1)
我阅读了所有这些答案,但没有一个对我有用,所以这是我的答案。
找到与此类似的代码行:
var view:View?=inflater.inflate(R.layout.fragment_profilefragement, container, false)
将光标置于fragement_ProfileFragement
上,然后用 CTRL 单击。检查您是否在正确的碎片 XML文件中。
答案 5 :(得分:0)
使用Fragment时我也遇到了同样的情况,我从onCreateView
提取了代码并将其放入onViewCreated
方法中,问题得以解决。
答案 6 :(得分:0)
我的RecyclerView遇到了同样的问题。它已经工作了几个月了。经过大量失败的故障排除步骤后,我执行了Build> Clean Project并解决了该问题。
答案 7 :(得分:0)
它也可能发生在xml文件中错误的上下文引用上,通常会出现在手动将Activity移至另一个包中时,Android Studio不会自动进行此更改:
<?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>
答案 8 :(得分:0)
您已仔细查看,因为在您的代码的某些部分您没有正确引用视图。换句话说,您的代码中不存在该特定视图。
这将节省您数小时查找错误的时间。