【发布时间】:2021-09-10 01:22:41
【问题描述】:
我正在尝试从 kotlin 合成迁移到推荐的视图绑定模式。为了减少锅炉代码,我选择使用来自here 的委托方法。
现在我面临一个问题,我不知道如何以优雅的方式解决它。我有两个相似的布局,它们仅与几个视图不同。例如,假设layout_a 和layout_b。
<!-- This is just an example (layout_a) ! -->
<LinearLayout>
<TextView
android:id="@+id/commonView1"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView
android:id="@+id/commonView2"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<!-- This is just an example (layout_b) ! -->
<LinearLayout>
<TextView
android:id="@+id/commonView1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/commonView2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/specialView1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
由于我不想在我的应用程序中为这些TextViews 编写文本设置器逻辑两次,因此我创建了一个额外的单例类,它通过view 对象精确映射这些常见视图。多亏了 kotlin 合成,当我使用相同的 id(如 commonView1 和 commonView2)时,我能够引用这些视图。因为现在我必须使用绑定对象(在这种情况下是 LayoutABinding 和 LayoutBBinding)我不能这样做。
当然,我可以通过编程方式更改specialView1 的可见性并将这两种布局合并为一个,但这种重复的原因是性能和内存效率。当然以上只是一个例子,在我的原始应用程序中,我有更多的视图会被不必要地渲染并浪费内存空间。
一种可能的解决方法是在这些特殊情况下使用 findViewById,这有点 IMO。
有没有办法抽象出这些绑定?
【问题讨论】:
-
你能分享你额外的单例类来展示你试图用数据绑定重新创建什么吗?
标签: android kotlin android-layout android-view android-viewbinding