我正在寻求对一个基本概念的澄清。如何最好地从片段访问活动中的视图?
目前我知道有两种方法:
使用fragment调用activity的findViewById .
将绑定公开并访问它,例如:activity.binding.example .
其中哪一个被认为是最佳实践,或者是否还有其他更有效的方法?
两种方法的缺点是它将活动和片段紧密耦合。如果您稍后决定您的片段需要由多个活动托管,您将会遇到问题。使用接口可以帮助解决这个问题,但只能在一定程度上。
更灵活的解决方案是创建小型专用视图模型类来表示片段和活动之间的桥梁。如果您将其设置为共享视图模型,则片段和活动将共享该实例。然后,您可以使用典型的反应式通信(
LiveData
、RxJava、Kotlin Flow
等)让片段间接更新活动的状态。现在,所有消费者(活动、父片段、对等片段)需要做的就是共享相同的视图模型并观察反应状态,然后更新其 UI 以匹配。