kotlin - 解决 DataBindingUtil.setContentView() 中的错误

kotlin - resolve error in DataBindingUtil.setContentView()

我在 DataBindingUtil.setContentView() 中遇到问题。它显示以下错误。

[Type inference failed: Not enough information to infer parameter T in fun setContentView(p0: Activity, p1: Int): T! Please specify it explicitly.

我的代码:

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

谁能帮我解决这个错误。我也做了 clean 和 Rebuild(Invalidate and Restart)

请让我知道任何其他建议。

顺便说一下,清理构建、无效和重启并不是 Android studio #JustKidding 中唯一的解决方案 :)

关于您遇到的错误,您实际上需要指定视图:

val listViewEmployees = findViewById(R.id.listViewEmployees)

作为 ListView 到

val listViewEmployees = findViewById<ListView>(R.id.listViewEmployees)

像这样创建一个绑定对象。

 val binding: ActivityMainBinding = DataBindingUtil.setContentView(
        this, R.layout.activity_main)

你不得不提到 Activity 绑定类型。我有 Main activity,所以绑定类型是 ActivityMainBinding。这是你错过的。

应该是这样的:

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

使用:

var binding : ActivityHomeBinding = DataBindingUtil.setContentView(this, R.layout.activity_home)

DataBindingUtil.setContentView 正在返回作为参数传入的特定布局文件的绑定。

private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   binding = DataBindingUtil.setContentView(this@MainActivity, R.layout.activity_main)
}

在 Kotlin 中,一开始一切看起来都很奇怪。参考上面的代码解决问题,如果错误没有解决,检查下面的类型转换。

binding = DataBindingUtil.setContentView<ActivityMainBinding>(this@MainActivity, R.layout.activity_main)

仅供参考:名称 ActivityMainBinding 来自您的布局名称 xml。如果它被命名为 "activity_main" 它将是 "ActivityMainBinding"

将您的代码修改为:

    var binding : ActivityMainBinding = 
    DataBindingUtil.setContentView(this,R.layout.activity_home) 

然后制作“文件 -> 使缓存无效/重新启动”

您还必须在视图的 XML 文件中启用绑定,只需将所有 ui 包裹在布局标签中即可。

只需转到文件:R.layout.activity_home

应该是下面的代码-

<?xml version="1.0" encoding="utf-8"?>
<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>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".activities.SurveyListActivity">

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

在您项目的布局文件中,即 ativity_home.xml 确保您已将布局包含在 <layout> 标记中,可能是约束、线性、相对等。 此外,将所有命名空间添加到布局标记

例如改

<ScrollView 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.auth.SignUpActivity">

<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/>

<Scroll View
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.auth.SignUpActivity">