ViewBinding - 不同风格的布局资源

Posted

技术标签:

【中文标题】ViewBinding - 不同风格的布局资源【英文标题】:ViewBinding - Different Flavor Layout Resource 【发布时间】:2020-06-18 08:35:31 【问题描述】:

我的风格包含与我的main 源集中相同的布局资源。这样它就可以用特定于风味的那一种来覆盖主要的那一种。我在很多地方都这样做过,并且在我介绍 ViewBinding 之前效果很好。为了准确起见,布局是嵌套布局,“包含”在片段中。

结构如下:

main
 - res 
 - - layout 
 - - - layout_sign_up_details_fields.xml
flavor 
 - res 
 - - layout 
 - - - layout_sign_up_details_fields.xml

我有一个视图,其 ID 为 til_sudf_first_name,在我的主要资源中没有的我的风味特定布局资源中。这是有意的。通过在运行此构建变体时查看生成的源,我可以看到 View 在我的绑定类中“绑定”了。

@NonNull
public final TextInputLayout tilSudfFirstName;

现在实际绑定发生在“基”类中,并使用 protected 可见性修饰符与子类共享,如下所示:

private var _binding : FragmentSignUpDetailsBinding? = null
protected val binding get() = _binding!!
protected val detailsBinding get() = binding.lSudfDetails

问题是detailsBinding 不包含我需要的视图,即使它存在于生成的类中。

另外,另一个奇怪的事情是即使main布局文件中的视图不在风味特定的布局文件中,它们仍然包含在生成的布局文件中。

我正在尝试做的事情是否可能?我可以使用的解决方法是像我一样对这个实例使用 kotlin 的合成视图处理,但我试图使用推荐的方法

【问题讨论】:

现在,我不得不在我的风味依赖类中去老学校,并使用findViewById 来引用风味特定视图。 【参考方案1】:

诀窍是为您的片段和视图模型使用一个共享包名称:

main
 - java
 - - MainFragment (package com.rahul.sample.<..>)
 - - MainViewModel (package com.rahul.sample.<..>)

flavor
 - java
 - - FlavorFragment (package com.rahul.sample.<..>)
 - - FlavorViewModel (package com.rahul.sample.<..>)

这样绑定就起作用了。

【讨论】:

以上是关于ViewBinding - 不同风格的布局资源的主要内容,如果未能解决你的问题,请参考以下文章

Android Jectpack-ViewBinding 实践(kotlin实现)

重命名布局元素的 ID 不会重命名 viewBinding 引用

ViewBinding之include的布局,引用不到的古怪问题

Android ViewBinding使用详解

一起Talk Android吧(第三百八十三回:视图绑定-ViewBinding)

ViewBinding用法