关于android: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.

我的代码:

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

任何人都可以帮助我解决此错误。我已经完成了清理,并且Rebuild(Invalidate and Restart)也完成了。

请让我知道其他建议。


使用:

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

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


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

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

您必须提及"活动绑定"类型。我有Main活动,因此绑定类型为ActivityMainBinding。这就是您所错过的。

应该是这样的:

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

您还必须通过简单地将所有ui包装在布局标记中来在视图的XML文件中启用绑定。

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

它应该看起来像下面的代码-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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>

将代码修改为:

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

然后创建"文件->使缓存无效/重新启动"


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

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

val listViewEmployees = findViewById(R.id.listViewEmployees)

作为ListView到

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


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

在Kotlin,一切最初看起来都很怪异。请参考上面的代码来解决此问题,即使错误仍未解决,也请检查以下类型转换。

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

仅供参考:名称ActivityMainBinding来自布局xml的名称。如果将其命名为" activity_main",则它将为" ActivityMainBinding"