gpt4 book ai didi

android - 我不能在 kotlin 中使用 DataBindingUtil.setContentView()

转载 作者:行者123 更新时间:2023-12-03 05:05:00 25 4
gpt4 key购买 nike

当我想开始名为 DetailActivity 的新 Activity 时,我的应用程序将 crash.这是我的错误:

      E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.notepad, PID: 4793
android.content.res.Resources$NotFoundException: String resource ID #0x0
at android.content.res.Resources.getText(Resources.java:244)
at androidx.appcompat.widget.ResourcesWrapper.getText(ResourcesWrapper.java:54)
at android.widget.TextView.setText(TextView.java:3888)
at com.example.notepad.databinding.ActivityDetailBindingImpl.executeBindings(ActivityDetailBindingImpl.java:115)
at androidx.databinding.ViewDataBinding.executeBindingsInternal(ViewDataBinding.java:473)
at androidx.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:445)
...

我认为它与 setContentView有关.因为当我使用常见的 setContentView程序运行良好,但当我使用 DataBindingUtil.setContentView()我的应用程序 crashs.这是 DetailActivity :
    import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.example.notepad.databinding.ActivityDetailBinding

class DetailActivity : AppCompatActivity() {
private lateinit var binding: ActivityDetailBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_detail)


if(intent != null) {
binding.nameText.text = intent.getStringExtra(EXTRA_NAME)
binding.ageText.text = intent.getStringExtra(EXTRA_AGE)
}

}

这是 activity_detail :
    <layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
>
<data>
<variable
name="person"
type="com.example.notepad.Person" />
</data>

<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".DetailActivity">

<TextView
android:id="@+id/name_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{person.name}"/>

<TextView
android:id="@+id/age_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{person.age}"/>

</LinearLayout>
</layout>

这是人类:
class Person(var name: String , var age: Int)

[更新]
我使用 kolin 时,我的 ActivityDetailBindingImpl 文件在 java 中。也许问题是关于这个的。

最佳答案

正如我的评论中所暗示的,问题应该出在类 class Person(var name: String, var age: Int) 上。以及 xml 中的绑定(bind):

        <TextView
android:id="@+id/age_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{person.age}"/>
android:text="@{person.age}"数据绑定(bind)框架将搜索方法 setTextTextView接受一个 person.age.class 类型的参数这是 Int .这个方法就是这个 one如您所见,它需要一个资源ID。

这意味着 TextView 将尝试查找 id 与 Person.age 的值匹配的字符串。根据您的堆栈跟踪不存在。

要解决此问题,请更改 age 的类型至 String在绑定(bind)中使用另一种方法,例如:
    <TextView
android:id="@+id/age_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{String.valueOf(person.age)}"/>

关于android - 我不能在 kotlin 中使用 DataBindingUtil.setContentView(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60986257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com