ViewBinding-不同风格的布局资源



我有一个风格,它包含与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的合成视图处理来处理这个例子,因为我一直在尝试使用推荐的方法

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

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

这样装订工作。

最新更新