Android Activity 的 ViewBinding 需要 ViewGroup
Android ViewBinding for Activity requires ViewGroup
对于我的 Android 应用程序,我正在尝试实施 ViewBinding Google 这些天建议:
https://developer.android.com/topic/libraries/view-binding
但是,在那里(以及在所有教程中)我看到了这种绑定方法:
binding = ResultProfileBinding.inflate(layoutInflater)
但是当我像这样将它应用到我的 Activity 时,这不起作用:
binding = ActivityMainBinding.inflate(layoutInflater)
它需要 parent:ViewGroup
的另一个参数,而我的 activity 中没有。我也不能像这样将它设置为空:
binding = ActivityMainBinding.inflate(layoutInflater, null)
因为这是一个 NonNull 参数。
我也试过有人这样建议的东西
private lateinit var binding2: ViewDataBinding
...
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
但这也因错误而失败:
NoClassDefFoundError: Failed resolution of: Landroidx/databinding/DataBinderMapperImpl;
那我错过了什么?如何获得 Activity 的 ViewBinding?
---- 编辑 ----
所以要清楚。
我在 gradle.properties
中添加了 android.useAndroidX=true
build.gradle 文件已经包含
android {
compileSdk 31
buildFeatures {
viewBinding true
}
Activity 的代码如下所示:
进口...databinding.ActivityMainBinding
class 主要Activity: AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
}
}
我遇到了同样的问题,但是将 android.useAndroidX=true
添加到 gradle.properties(Project Properties)
会解决问题。
好的,原来问题出在我的布局上。
布局文件以 <merge
标记开头。我假设 IDE 将其解释为我的子布局。这似乎并没有给正常编译带来错误,但显然视图绑定对我来说太聪明了。
无论如何,将其更改为像
这样的普通容器时
<androidx.constraintlayout.widget.ConstraintLayout
它工作正常。
谢谢!
对于我的 Android 应用程序,我正在尝试实施 ViewBinding Google 这些天建议:
https://developer.android.com/topic/libraries/view-binding
但是,在那里(以及在所有教程中)我看到了这种绑定方法:
binding = ResultProfileBinding.inflate(layoutInflater)
但是当我像这样将它应用到我的 Activity 时,这不起作用:
binding = ActivityMainBinding.inflate(layoutInflater)
它需要 parent:ViewGroup
的另一个参数,而我的 activity 中没有。我也不能像这样将它设置为空:
binding = ActivityMainBinding.inflate(layoutInflater, null)
因为这是一个 NonNull 参数。
我也试过有人这样建议的东西
private lateinit var binding2: ViewDataBinding
...
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
但这也因错误而失败:
NoClassDefFoundError: Failed resolution of: Landroidx/databinding/DataBinderMapperImpl;
那我错过了什么?如何获得 Activity 的 ViewBinding?
---- 编辑 ----
所以要清楚。
我在 gradle.properties
中添加了 android.useAndroidX=truebuild.gradle 文件已经包含
android { compileSdk 31
buildFeatures { viewBinding true }
Activity 的代码如下所示:
进口...databinding.ActivityMainBinding
class 主要Activity: AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
}
}
我遇到了同样的问题,但是将 android.useAndroidX=true
添加到 gradle.properties(Project Properties)
会解决问题。
好的,原来问题出在我的布局上。
布局文件以 <merge
标记开头。我假设 IDE 将其解释为我的子布局。这似乎并没有给正常编译带来错误,但显然视图绑定对我来说太聪明了。
无论如何,将其更改为像
这样的普通容器时<androidx.constraintlayout.widget.ConstraintLayout
它工作正常。 谢谢!