我正在学习 MVVM 模式,现在有一个问题。我有一个带有 imageview 的活动 A,还有一个带有相同 imageview 但在另一个地方更大的活动 B。当在活动 A 中单击 imageview 时,我想启动活动 B,并且 imageview 应该是共享元素,以通过漂亮的动画实现我想要的。
使用数据绑定我处理在我的视图模型中单击图像视图:
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:onClick="@{(v) -> user.onAvatarClick(v)}"
android:scaleType="centerCrop"
android:src="@{user.photoUrl}"
android:transitionName="@string/avatar_transition" />
在我的视图模型中,我应该写这样的东西:
public void onAvatarClick(View view) {
Intent intent = new Intent(context, AvatarActivity.class);
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, view, view.getTransitionName());
context.startActivity(intent, options.toBundle());
}
但是,问题是我的视图模型对活动一无所知。而且我不知道如何做我想做的事。
一种可能的解决方案是使用 startActivityB(View view) 之类的方法创建接口,并在活动中实现它并将其设置为字段,例如 viewModelListener。然后我可以写类似的东西:
public void onAvatarClick(View view) {
viewModelListener.startActivityB(view);
}
但在这种情况下,我的视图模型将引用视图,它打破了 MVVM 的主要思想,对吧?
那么,使用 MVVM 架构通过共享元素开始新活动的正确方法是什么?