【问题标题】:i can't use DataBindingUtil.setContentView() with kotlin我不能在 kotlin 中使用 DataBindingUtil.setContentView()
【发布时间】:2020-04-02 07:26:00
【问题描述】:

当我想启动名为 DetailActivity 的新活动时,我的应用程序将 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 中。也许问题是关于这个的。

【问题讨论】:

  • 你能把com.example.notepad.Person的代码贴出来吗?从堆栈跟踪看来,您正在将文本视图的文本设置为不存在的资源 - 准确地说是 0。如果Person.namePerson.age 是整数,我只能看到这可能。我猜age 是?
  • 发布更新。 person 是一个简单的类

标签: android gradle kotlin data-binding android-databinding


【解决方案1】:

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

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

android:text="@{person.age}" 数据绑定框架将在TextView 中搜索方法setText,该方法采用person.age.class 类型的参数Int。这个方法就是这个one,你可以看到它需要一个资源ID。

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

要解决此问题,请将age 的类型更改为String,在绑定中使用另一种方法,例如:

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

【讨论】:

  • 我不能像你的回答那样使用 toString。我得到这个错误:找不到 identifire "toString()"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 2020-07-01
相关资源
最近更新 更多