我有一个风格,它包含与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.<..>)
这样装订工作。