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

时间:2019-02-06 06:20:53

标签: android kotlin android-databinding

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

  

[类型推断失败:没有足够的信息来推断有趣的setContentView中的参数T(p0:活动,p1:Int):T!       请明确指定。

我的代码:

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)也做了。

请让我知道其他建议。

7 个答案:

答案 0 :(得分:0)

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

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

val listViewEmployees = findViewById(R.id.listViewEmployees)

作为ListView到

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

答案 1 :(得分:0)

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

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

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

应该是这样的:

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

答案 2 :(得分:0)

使用:

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

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

答案 3 :(得分:0)

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

在科特林,最初一切似乎都很奇怪。请参考上面的代码来解决此问题,即使错误仍未解决,也请检查下面的类型转换。

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

答案 4 :(得分:0)

将代码修改为:

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

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

答案 5 :(得分:0)

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

只需转到文件: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>

答案 6 :(得分:0)

在您项目的布局文件中,即 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">