java.lang.IllegalStateException: TextView 不能为空 (Android/Kotlin)
Posted
技术标签:
【中文标题】java.lang.IllegalStateException: TextView 不能为空 (Android/Kotlin)【英文标题】:java.lang.IllegalStateException: TextView must not be null (Android/Kotlin) 【发布时间】:2018-05-04 12:20:15 【问题描述】:我的 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
不为空,我已检查日志。
【问题讨论】:
ctrl
+ 点击itemDateSummaryList
并查看textview
是否来自与infate
相同的布局文件或其他
也发布 XML。让我们看看。
@IronyStack 你是对的,我膨胀了错误的布局。
@kokilayaa 你也可以参考我的回答:)
【参考方案1】:
错误与listItem.date
无关,错误表明您尝试设置文本的dateText
文本视图为空,
仔细检查您使用的是正确的textview
可能性:1)您可能使用了错误的 id
或 textview
2)您可能在膨胀视图时使用了错误的文件.
ctrl
+ 点击itemDateSummaryList
并查看textview
是否来自与infate
相同的布局文件或其他
【讨论】:
天哪,我所有的片段都是转换的活动,第一次转换的时候,我只是复制粘贴了它的 onCreateView 覆盖,忘记更改膨胀的布局,因为我将它粘贴到其他新片段上。这应该是公认的答案。该死。一个简单的错误,我花了 3 个小时【参考方案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
-
要使用布局内的任何布局视图,您可以将其与 (
root.
) 一起使用,例如:
root?.textView.text="Hello"
【讨论】:
请注意,如果您的视图位于导航标题或类似的东西中,那么您必须初始化这些视图。 编辑:请注意,如果您的视图位于导航标题或类似的东西中,那么您必须先初始化这些视图。类似,val navView: NavigationView = findViewById(R.id.nav_view) val navHeader = navView.getHeaderView(0) val textView = navHeader.findViewById(R.id.textView) as TextView【参考方案3】:这是说您的 dateText
视图本身为 null 而不是值 listItem.date
验证您是否正确呈现它,itemview
具有您尝试访问的 id 的 TextView
【讨论】:
【参考方案4】:我在使用 Fragment 时也遇到了同样的情况,我从 onCreateView
中取出我的代码并将其放到 onViewCreated
方法中,问题解决了。
【讨论】:
【参考方案5】:我的片段收到此错误, 我解决了这个错误,
错误代码:
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)
【讨论】:
【参考方案6】: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>
【讨论】:
【参考方案7】:我阅读了所有这些答案,但没有一个对我有用,所以这是我的答案。
找到与此类似的代码行:
var view:View?=inflater.inflate(R.layout.fragment_profilefragement, container, false)
将光标放在fragement_ProfileFragement
上并使用CTRL 单击。检查您是否在正确的 fragment XML 文件中。
【讨论】:
【参考方案8】:我的 RecyclerView 也遇到了同样的问题。它已经工作了几个月。在许多不成功的故障排除步骤之后,我执行了 Build > Clean Project 并解决了问题。
【讨论】:
【参考方案9】:您已仔细查看,因为在您的代码的某些部分中您没有正确引用视图。换句话说,您的代码中不存在该特定视图。
-
尝试重复您执行的步骤
在代码失败的类中检查您的视图是否正确膨胀。
这将节省您查找问题所在的时间。
【讨论】:
以上是关于java.lang.IllegalStateException: TextView 不能为空 (Android/Kotlin)的主要内容,如果未能解决你的问题,请参考以下文章