我很难处理我的一个Android应用程序中的碎片。有些东西看起来很奇怪,别人看一看可能会有一些启示。
以下是片段的XML:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/theFragmentID"
tools:context=".NiceFragment">
<TextView
android:id="@+id/labelOne"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="Place_Holder-One" />
<TextView
android:id="@+id/labelTwo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="Place_Holder=Two" />
<EditText
android:id="@+id/inpNew"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="60px" />
.....
</FrameLayout>
下面是我在应用程序中的某个地方(即在片段的 onCreateView() 方法中)的一些Kotlin代码:
val labelOne = fragHandle.findViewById<TextView>(R.id.labelOne)
labelOne.text = "Some interesting sentence"
val labelTwo = fragHandle.findViewById<TextView>(R.id.labelTwo)
labelTwo.text = "Some other very interesting sentence"
最后,这是我在上面代码的最后一行中得到的错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at me.soft.myapp.NiceFragment.onCreateView(NiceFragment.kt:99)
上面的四行Kotlin代码可能更适合放在片段的 onViewCreated() 方法中,但我的问题是:
为什么4号线出现问题,而2号线却能正常工作?
在我看来,labelOne 和 labelTwo 只是两个完全等价的对象。
我还尝试将这段代码放在 onViewCreated() 中,但问题仍然存在。
我还能漏掉什么细节?
3条答案
按热度按时间pbgvytdp1#
请检查写入Kotlin类的导入xml。将导入错误的XML文件。
bsxbgnwa2#
当使用Kotlin时,有一个非常好的选择,当处理片段时。你也应该考虑到这一点。移动你的布局名称到片段构造函数,并做如下代码。
在片段中使用onViewCreated而不是onCreateView始终是一个很好的做法。
快乐编码
o0lyfsai3#
在我看来,您可以使用viewBinding,
把这个加到你的Gradle里
在你的片段中可以这样使用绑定
viewBinding替换了findViewById,并且ViewBinding具有空值安全和类型安全