问题标签 [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.

0 投票
1 回答
803 浏览

android - ViewBinding - 布局中的访问按钮导致未解析的引用

我正在学习使用 Kotlin 进行 Android 开发,但遇到了一个我无法解决的问题。

运行构建时出现以下错误:

Code\DiceRoller\app\src\main\java\com\example\diceroller\MainActivity.kt: (16, 34): Unresolved reference: rollButto

这是我的 MainActivity.kt 代码:

一切正常,直到尝试访问会产生参考错误的滚动按钮,即使它出现在自动完成中。我也尝试访问另一个元素,它会产生相同的错误。

这是我的 xml 文件(dice_roller_main.xml):

我确保在 gradle build 中打开视图绑定

有人遇到过这个问题吗?我试过在这里和谷歌上搜索这个问题,但找不到和我有类似问题的人。

编辑:

我已经完成了生成的绑定类,看起来在 xml 中定义的按钮和文本视图没有生成代码

0 投票
0 回答
1023 浏览

android - 使用视图绑定和实时数据观察者在 Fragment 中崩溃

这是我的实现:

在极少数情况下,会发生这种崩溃:

一种想法是,当视图在observe()订阅结束之前被销毁时会发生这种情况。

我挖掘了片段代码并在 FragmentManager 中找到了这个:

viewLifecycleOwner在视图被破坏后,它实际上被破坏了。但是由于这个函数是不可暂停的,所以应该没有办法从主线程交错。

我的假设正确吗?

我进一步发现,viewLifecycleOwner如果存在退出转换(FragmentManager#moveToState() Lines 1261+),则可以长寿:

然而,这也会延迟视图的破坏。

你知道崩溃是如何发生的吗?(我在样品中留下了 Koin 注射液,sharedViewModel以防这可能是问题的根源。)

0 投票
0 回答
240 浏览

android - 片段中的 ViewBinding - 内存泄漏甚至 NullPointerException 可能吗?

官方文档显示了一个代码示例,其中绑定属性设置为nullin onDestroyView()

对我来说显而易见的原因是视图已被破坏但尚未被破坏的片段可以释放其视图的内存。如果片段仍然具有对绑定的引用,则此内存将泄漏,该绑定本身包含对视图的引用。

我的问题是是否存在缺少将绑定属性设置为null可能导致的情况NullPointerException

在这个一般性问题之后,我想根据这个具体的代码示例提出相同的问题binding,首先避免使用该属性:

我没有持有财产。绑定的范围仅限于

  1. onCreateView()
  2. 实时数据观察者的回调

虽然 1. 似乎并不重要。我想知道 2. 是否安全。

  • 关于内存泄漏 - 我认为实时数据观察范围也通过viewLifecycleObserver. 因此,如果发生内存泄漏,它不会持续很长时间。

  • 关于一个NullPointerException

0 投票
1 回答
1156 浏览

android - Android 中 Fragments 中的 ViewBindng 问题

我有一个 Activity 并在那里使用 ViewBinding 没有问题。不是我创建了一个类似的 Fragment 并打算在那里使用 ViewBinding。不幸的是,我收到了错误消息,尽管我按照谷歌开发者页面中提到的关于 ViewBinding 的步骤(https://developer.android.com/topic/libraries/view-binding

在这里您可以看到 Java 文件:

我收到错误消息“无法解析符号 'Menu_FragmentBinding'”和“无法解析方法 'getRoot()'”。我不明白为什么我得到它们。你们中有人有想法吗?我会很感激每一条评论,我会感谢你的帮助。

0 投票
3 回答
180 浏览

android - 如何避免这些乏味的 findViewById() 调用?

我有一个带有两个 TextView 的简单布局文件:

我在我的应用程序的某些地方包含了这个布局。在我的最后一个案例中,我必须包含 4 次。要在单个包含的布局中为这两个文本视图查找和设置文本,我必须找到一个布局的 id,然后从那里找到两个文本视图的 id。并对所有包含的布局重复 3 次。这会导致一些丑陋和可怕的代码维护:

我怎样才能避免这种怪物?

0 投票
1 回答
1530 浏览

android - ViewDataBinding 导致在 activity.finish() 后恢复应用程序崩溃,NPE 在视图附件期间访问 mRebindRunnable

成功启动活动后崩溃表面,膨胀带有数据绑定的片段。在根级别按下后退按钮后,应用程序(正确地)通过activity.finish()但将应用程序实例保留在后台。重新启动后,应用程序会在视图创建后的某个时间点崩溃(至少基于调试)。

迷恋;撞车;崩溃:

深入研究源代码,调试,我能收集到的最好的结果是 ViewDataBinding 看到以前绑定的视图已重新附加,并尝试与现有资源重新绑定。但是,它显然失去了对静态可运行文件的引用。来自 ViewDataBinding 的相关源代码:

我确实注意到了相同的堆栈跟踪:App crash caused by data binding related to java.lang.Runnable android.databinding.ViewDataBinding.mRebindRunnable但该问题似乎与应用程序立即崩溃有关(我的仅在尝试补水后发生)。但是从那个问题来看,我确实注意到记录我的视图标签会返回 null。我尝试在 xml 中设置一个静态标签,没有任何变化。

我尝试过的其他事情:

  • 如果我只实例化片段,则不会发生问题(但显然不会附加到框架布局
  • 没有明确的调试崩溃点(onCreateView、onViewCreated 都被调用)
  • 我尝试改变膨胀、分配生命周期所有者、绑定视图模型的方式;没有任何更改影响崩溃。
  • 我尝试对绑定(invalidateAll()、unbind())进行一些调用,但没有成功。

同样,该问题仅在应用程序实例仍然存在但活动已被破坏时才会出现。感谢您的任何提示!

编辑:相关代码位

活动 (Java) -

片段(科特林) -

更新

有趣的是,当我尝试将相同的片段(新实例化)膨胀到不同的(未启动)活动时,我现在看到了这一点。调试这种情况,除了在膨胀并返回绑定的根视图(而不是 null)后遇到崩溃之外,我找不到任何问题。我已经尝试过为布局创建的静态方法以及 DataBindingUtil。两者都经历了同样的崩溃。

0 投票
0 回答
83 浏览

android - 无法使 ViewBinding 功能正常

我正在尝试构建一个模型项目以更好地理解 ViewBinding,以便我可以将知识转发到我的主项目中。

为了更好地理解我面临的问题,我将上传我将展示的正在运行的代码部分的图像,因此希望这能正确突出问题。

如果您需要更多文件/代码来清楚地了解正在发生的事情,我很乐意上传它。

这是我用这段代码得到的结果,这也是我想用 ViewBinding 实现的(期望的输出!):

期望的输出

现在,我想获得相同的确切结果,但是使用 ViewBinding(请记住,我只发布了代码中的不同之处,而不是完全相同的方法,例如 getItemCount() 和 onBindViewHolder())

(错误的输出) 错误的输出

任何人都知道如何解决这个问题以及我做错了什么?

0 投票
1 回答
39 浏览

android - 如何在 Android 片段中渗透布局的差异

我刚刚开始在 Android 和 ViewBinding 中使用 Fragments,我有一个问题。基本上我发现(至少)有两种方法可以在 Fragment 的 onCreateView() 方法中渗透布局。以下是两个选项:

选项 1(这是创建 Fragment 时 Android Studio 的默认选项):

选项 2(使用 ViewBinding):

我想知道,这两种方法之间是否存在实质性差异。在任何情况下,您会更喜欢其中一个而不是另一个?我会很感激每一条评论,并非常感谢您的帮助。

0 投票
1 回答
179 浏览

java - 未调用 Android ViewBinding onItemClickListener

请帮助找出为什么视图绑定onItemClickListener不起作用。

简而言之:我正在加载片段列表。并且需要通过点击item来选择要加载的fragment,所以我实现AdapterView.OnItemClickListener了这个目的。但是当我执行点击时 - 没有任何反应,方法不会被调用。

XML 布局:

谢谢。

0 投票
3 回答
5344 浏览

android - 如何将抽象与 ViewBinding 与基本活动一起使用?

我正在制作一个基类,以便将所有子绑定设置在基类中

我已经做到了

但是我无法获得在 oncreat() 中绑定视图的方法,通常我们将视图绑定中的布局绑定为

但我正在寻找基本活动的通用方式