我将使用androidx导航组件。在FragmentA中,我有一个包含卡片的RecyclerView。这些卡片包含图片和一个“喜欢”按钮。当用户喜欢内容时,“喜欢”按钮的资源会更改。
这个卡片内容是一个单独的布局,包含在RecyclerViews.ViewHolder布局中。
在适配器中绑定视图持有者时,我使用唯一ID动态更新
<MaterialCardView>
<include layout="@layout/item_main_content_layout" />
</MaterialCardView>
并且包含在上面的item_layout:
<merge>
<LinearLayout
android:id="@+id/content"
android:transitionName="content">
<ImageView
android:id="@+id/image"/>
<ImageView
android:id="@+id/like"/>
</LinearLayout>
</merge>
在适配器中绑定视图持有者时,我使用唯一ID动态更新
transitionName
。 FragmentB包含相同的布局,并在视图创建时更新传递的项的转换名称。
通过点击项目从FragmentA -> FragmentB导航时,共享转换按预期工作。当我弹回堆栈时,它像预期的那样回到列表中的原始位置。
问题
正如前面所说。当我喜欢/不喜欢内容时,喜欢按钮的资源更改。当我打开FragmentB时,保留了此喜欢ImageView
中的资源。但是当我更改状态,也就是在FragmentB中更改喜欢按钮的资源并弹回堆栈时,转换发生了,但按钮资源切换回FragmentA中的起始资源。
如何在弹回堆栈时保留共享元素中的src
可绘制对象?
MainActivity
时更新视图?我的ViewModel
在其rx回调中接收到更新,但它显然不会更新视图,因为它们在后台并且不再观察ViewModel
。我自言自语地想,似乎当我恢复时,我需要更新RecyclerView
?在OnResume / OnResult中,我认为更新打开位置上的项目并通知项目更改应该可以解决问题?我真的很想避免这样的静态参数传递。 - parohy