我的android应用有一个购物车活动,在该活动中,我将LiveData与CartRepository和Room数据库一起使用以显示购物车中的项目。效果很好。在工具栏中,我有一个actionLayout(下图),带有一个带有图标的购物车图标,该视图显示了购物车中的物品数量。我很好奇,如果这是我也应该使用LiveData的地方?有没有一种方法可以将其转变为某种组件,该组件可以在购物车中的物品发生更改时利用LiveData进行更新?如果是这样,我该怎么做? 谢谢!
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="60dp"
android:layout_height="36dp">
<ImageView
android:layout_width="36dp"
android:layout_height="36dp"
android:clickable="false"
android:src="@drawable/icon_cart" />
<TextView
android:id="@+id/cart_badge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:background="@drawable/rounded_corner"
android:layout_alignParentRight="true"
android:layout_marginRight="5dp"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:textSize="14dp"
android:textColor="@android:color/white" />
</RelativeLayout>
答案 0 :(得分:0)
您将需要在活动中观察购物车存储库中的更改。为此,您可以在存储库和活动之间使用视图模型。因此,与其直接从您的存储库中使用LiveData,不如让它通过视图模型。完成此操作后,观察活动中的数据更改(在您的情况下为购物车中的物品数量),并在获得新的编号(或任何数据)后更新textview。
使用视图模型的一个优点是-即使您的生命周期所有者(活动或片段)被破坏并重新创建,相同的视图模型实例也可以连接到新的生命周期所有者。这样,您就永远不会丢失应用程序中的当前状态。