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">
我在 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">