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

k75qkfdt  于 2023-06-27  发布在  Android
关注(0)|答案(8)|浏览(329)

我在DataBindingUtil.setContentView()中遇到了问题。显示以下错误。
[Type推理失败:没有足够的信息来推断fun setContentView(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)也。
请让我知道任何其他的建议。

nwo49xxi

nwo49xxi1#

用途:

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

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

i86rm4rw

i86rm4rw2#

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

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

必须提到Activity Binding类型。我有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) 
}
flseospp

flseospp3#

顺便说一下,清理构建,无效和重新启动并不是Android Studio中的唯一解决方案#JustKidding:)
关于你面临的错误,你实际上需要指定视图:
val listViewEmployees = findViewById(R.id.listViewEmployees)
作为ListView到
val listViewEmployees = findViewById<ListView>(R.id.listViewEmployees)

vsaztqbk

vsaztqbk4#

将代码修改为:

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

然后执行“文件->无效缓存/重新启动”

kiz8lqtg

kiz8lqtg5#

您还必须在视图的XML文件中启用绑定,只需将所有ui Package 在layout标记中即可。
只要转到文件: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>
dphi5xsq

dphi5xsq6#

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

guykilcj7#

试试这个

binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
zzzyeukh

zzzyeukh8#

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

在Kotlin中,最初一切看起来都很奇怪。参考上面的代码来解决问题,即使错误没有解决,也可以 checkout 下面的类型转换。

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

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

相关问题