【问题标题】:How to solve Databinding utils not found issue in kotlin如何解决 Kotlin 中未找到数据绑定实用程序的问题
【发布时间】:2021-05-19 03:15:00
【问题描述】:

我目前正在尝试学习 android 开发,并且正在关注 codeLabs 的教程。

这是我的代码

package com.example.android.aboutme

import android.content.Context
import android.os.Bundle
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.example.android.aboutme.databinding.ActivityMainBinding


  class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
    
    }
}

无论发生什么,DataBindingUtils 总是红色的,我无法导入它

这是我的 gradle build 的副本

buildFeatures{
    viewBinding = true
    dataBinding = true
}

这里也是xml文件

<Layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

 <LinearLayout android:orientation="horizontal">
    <Button
        android:id="@+id/done_button"
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="@dimen/layout_margin"
        android:fontFamily="@font/roboto"
        android:text="@string/done"
        android:textAlignment="center" />
    <LinearLayout/>
 <Layout/>

我目前正在使用 android studio 4.0

我收到以下错误

 ActivityMainBinding! is not a subtype of ViewDataBinding!

【问题讨论】:

  • 重启并使缓存失效
  • 不起作用。任何其他建议

标签: android kotlin data-binding


【解决方案1】:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">

<data>

</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/done_button"
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Test"
        android:textAlignment="center" />

</LinearLayout>

您的 XML 几乎没有错误。

请将此代码复制粘贴到您的布局 xml 中,看看它是否有效。如果给您带来问题,也请尝试清理和重建以及Invalidate Caches /Restart

这是一个测试代码,如果它有效,你可以包含我遗漏的字体和字符串等内容。

【讨论】:

  • 有趣的是这实际上有效,所以问题是因为上下文属性?
  • 不是真正的上下文属性,我认为问题是由于缺少 LinearLayout 和 的属性引起的标签关闭。始终像 &lt;/LinearLayout&gt; 这样关闭 LinearLayout 标签,但不要像 &lt;LinearLayout/&gt; 这样关闭。布局标签应该像这样&lt;/layout&gt; 关闭,但你以这种方式关闭它` `
【解决方案2】:
try with this

 binding = DataBindingUtils.setContentView(this,R.layout.activity_main)

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
【解决方案3】:

这只是 DataBindingUtil 上的一个小错误。

它应该是 DatabindingUtil 而不是 DataBindingUtils。

请试试这个

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    //setContentView(R.layout.activity_main)

    //it is not DataBindingUtilS it is DataBindingUtil
    binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

}

}

如果有帮助,请告诉我。

【讨论】:

  • 我编辑了我的代码,但它不起作用。现在它说 ActivityMainBinding!不是 ViewDataBinding 的子类型!
  • 嗨@Ahmed 你用&lt;layout&gt; &lt;/layout&gt; 标签包裹了你的activity_main 吗?
  • 是的,我确实把它包起来了
  • 然后尝试清理Build Menu下的项目选择Clean project后跟Rebuild
  • File 菜单下尝试Invalidate Caches / Restart
猜你喜欢
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 2020-12-26
  • 1970-01-01
  • 2022-11-15
  • 2016-08-14
相关资源
最近更新 更多