java.lang.IllegalStateException:TextView不能为空(Android/Kotlin)

dtcbnfnu  于 2023-05-27  发布在  Android
关注(0)|答案(9)|浏览(178)

我有下面的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不是空的,我已经检查了日志。

v8wbuo2f

v8wbuo2f1#

该错误不是关于listItem.date,该错误说,该dateText textview你试图设置文本是空的,
仔细检查您使用的textview是否正确
可能性:

**1)**您可能使用了错误的idtextview
**2)**您可能在放大视图时使用了错误的文件。

ctrl +单击itemDateSummaryList,查看textview是否来自与infate相同的布局文件

8aqjt8rx

8aqjt8rx2#

**如果使用分片:**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
    }

1.要使用布局中的任何视图,您可以将其与(root.)一起使用,如:
root?.textView.text="Hello"

dly7yett

dly7yett3#

它说你的dateText视图本身是空的,而不是值listItem.date验证你是否正确渲染它,itemview具有你试图访问的id的TextView

9w11ddsr

9w11ddsr4#

在使用Fragment时,我也遇到了同样的问题,我从onCreateView中取出代码,并将其放入onViewCreated方法中,问题解决了。

huus2vyu

huus2vyu5#

我得到这个错误我的片段,我解决了这个错误,
错误代码:

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)
            }
        }
    }
}
gg58donl

gg58donl6#

它也可能发生在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>
jpfvwuh4

jpfvwuh47#

我读了所有这些答案,但没有一个对我有效,所以这里是我的答案。
找到与下面类似的代码行:

var view:View?=inflater.inflate(R.layout.fragment_profilefragement, container, false)

将光标放在fragement_ProfileFragement上,然后按CTRL单击。检查您是否在正确的 * fragment * XML文件中。

ercv8c1e

ercv8c1e8#

我的RecyclerView也遇到了同样的问题。它已经工作了几个月。在无数次失败的故障排除步骤之后,我做了一个构建>清理项目,它修复了这个问题。

i2byvkas

i2byvkas9#

您必须仔细查看,因为在代码的某些部分,您没有正确引用视图。换句话说,您的代码中不存在该特定视图。
1.试着重复你做过的步骤
1.在代码失败的类中检查视图是否正确膨胀。
这将保存你寻找错误的时间。

相关问题