问题标签 [android-viewbinding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 如何在 Android 中使用视图绑定
我一直在使用findViewById
然后 ButterKnife 来绑定视图。最近,我看到了这篇文章:https ://proandroiddev.com/new-in-android-viewbindings-the-difference-from-databinding-library-bef5945baf5e ,我不太清楚如何使用它。
我试过这样做,但它似乎在 Android Studio 3.4.2 中不起作用
val binding = MainActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
然后使用这些值,例如:
binding.button....
binding.textView....
android - Android:DataBinding 和 ViewBinding 的区别
自 Jetpack 发布以来,我们一直在使用DataBinding 。Android 文档表明在Android Studio 3.6 Canary 11+中添加了ViewBinding 。
我阅读了文档,但它看起来类似于DataBinding。
谁能解释这两个概念之间有什么区别?
android - 视图绑定不适用于“包含”:不兼容的类型:ProgressBarLayoutBinding 无法转换为 ViewDataBinding
安卓工作室 3.6。金丝雀 12
构建.gradle:
在 app/build.gradle 中:
在布局 xml 中:
这里progress_bar_layout.xml
这里是 CoroutinesRetrofitActivity.kt
但是当我尝试构建时出现错误:
但是如果我从 xml 中删除这个:
然后错误消失了。
有什么问题progress_bar_layout
?
如果我直接在布局中包含进度条,如下所示:
问题消失了。
为什么include
不工作?
android - Android 3.6 ViewStubProxy 未解析参考
我有这个 Kotlin 代码:
这在我的 XML 文件中:
当我编译 Android Studio 时报告以下错误:
- 未解决的参考:isInflated
- 未解决的参考:viewStub
- 未解决的参考:viewStub
我正在使用来自 Google 的新 ViewBinding 我正在使用 Android Studio 3.6 Canary 12、Gradle 3.6.0-alpha12 开发。这是 Android Studio 的错误还是我的错误?
java - 在 Fragment 中使用 Kotlin ViewBinding 时出现 NullPointerException
我正在尝试使用 kotlin 视图绑定将点击侦听器添加到我的片段内的按钮。我在 onCreateView 方法中设置点击监听器。当我这样做时,我得到一个空指针异常,因为尚未创建按钮。我认为 kotlin 视图绑定负责视图初始化,所以按钮不应该为空?
这是我的代码:
这是一个例外:
android - ViewBinding vs Kotlin Android Extensions 与合成视图
新的ViewBinding与带有合成视图绑定的Kotlin Android 扩展相比如何?
除了新的 ViewBindings 提供的 NullSafety 和 TypeSafety 之外,我们为什么要考虑放弃 Kotlin 在 Views 上使用合成绑定的方式?
新的 ViewBinding 是否更高效,因为它预先生成了 Binding 类?
java - 将 ViewBinding 与多个布局一起使用
编辑 - 解决方案
使用视图绑定时,会为每个 xml 生成一个 Java 绑定文件。问题是当您修改 xml 时,它不会重新生成 Java 文件。因此,当我在 activity_main.xml 中向 App_bar_main 添加一个 ID 标记时,我收到一条错误消息,指出它找不到该标记,不是因为它不喜欢它,而是因为它仍在使用较旧的 Java 文件。使缓存无效并重新启动也不会影响那些生成的 java 绑定文件。
重新生成文件的唯一方法是删除它们。
使用添加的 ID,我只需要使用它的 ID 调用 appBarMain,而不是尝试扩展它的布局。
activity_main.xml
谢谢大家的贡献
原来的
我正在尝试将findViewById
我的应用程序中的调用切换到新添加的调用,ViewBinding
但是在与调用的视图以外的视图交互时遇到问题setContentView()
。
我膨胀AppBarMainBinding的方式错了吗?还是我错过了其他东西?
activity_main.xml
包含和<include layout="@layout/app_bar_main" />
菜单
app_bar_main.xml
包含一个工具栏和一些操作按钮
在这种情况下,如果我setContentView(mActivityMainBinding.getRoot())
在主 Activity 的 onCreat() 中调用,应用程序会启动activity_main
布局并显示操作按钮和工具栏占位符,但这些按钮都不起作用。单击操作按钮不会调用它setOnClickListener
并且工具栏是空白的(它没有实现setSupportActionBar(toolbar)
)
activity_main.xml
app_bar_main.xml
谢谢
android - Kotlin 如何在没有 viewBinding.enabled = true 的情况下找到小部件?
安卓工作室 3.6
Android Studio 3.6中的一项新功能是
方法#1
在 build.gradle 中:
在 app/build.gradle 中:
我在 Kotlin 上的活动片段(方法#1)
这是我的qr_bluetooth_swipe_activity.xml
结果它工作正常。正如你所看到的,我使用这个:
没有使用方法findViewById
。
好的。
但我可以用另一种方法解决这个问题:
方法#2:
从app/build.gradle
块中删除viewBinding.enabled = true
像这样更改我在 Kotlin 上的活动(方法#2):
结果它工作正常。正如你所看到的,我使用这个:
没有使用方法findViewById
。
好的。
但问题是:
在方法#2中,绑定如何在没有的情况下工作
?
android - 无法隐藏项目编程
安卓工作室 3.6
在 app/build.gradle 中:
在我的活动中:
在我的qr_bluetooth_swipe_activity.xml
我想以编程方式隐藏blueToothBottonContainer。所以我试试这个:
但没有找到类似 smt 的方法setVisible
为什么?
android - java.lang.NullPointerException:缺少 ID 的必需视图:
安卓工作室 3.6
在 app/build.gradle 中:
这是我的xml:
和另一个 xml unclude prev。xml:
这是我的活动:
该应用程序已构建并运行。好的。
现在我移动 id - android:id="@+id/bluetoothBottonMainContainer"
像这样的外部容器:
应用程序已构建,但运行时我在此行中收到运行时错误:
错误: