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的布局,引用不到的古怪问题