【问题标题】:ViewBinding - Different Flavor Layout ResourceViewBinding - 不同风格的布局资源
【发布时间】: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 来引用风味特定视图。

标签: android android-layout data-binding android-flavors android-viewbinding


【解决方案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.<..>)

这样绑定就起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 2021-06-26
    • 2020-07-11
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    相关资源
    最近更新 更多