何时使用Android LiveData

何时使用Android LiveData,android,android-livedata,Android,Android Livedata,我的android应用程序有一个购物车活动,我使用LiveData和CartRepository和Room数据库来显示购物车中的项目。它工作得很好。在工具栏中,我有一个actionLayout(下图),其中有一个购物车图标,带有一个显示购物车中物品数量的文本视图。我很好奇这是不是一个我也应该使用LiveData的地方?有没有办法将其转换为某种组件,利用LiveData在购物车中的项目发生变化时进行更新?如果是的话,我会怎么做? 谢谢 您需要在活动中观察购物车存储库中的更改。为此,您可以在存储库和

我的android应用程序有一个购物车活动,我使用LiveData和CartRepository和Room数据库来显示购物车中的项目。它工作得很好。在工具栏中,我有一个actionLayout(下图),其中有一个购物车图标,带有一个显示购物车中物品数量的文本视图。我很好奇这是不是一个我也应该使用LiveData的地方?有没有办法将其转换为某种组件,利用LiveData在购物车中的项目发生变化时进行更新?如果是的话,我会怎么做? 谢谢


您需要在活动中观察购物车存储库中的更改。为此,您可以在存储库和活动之间使用视图模型。因此,与其直接使用存储库中的LiveData,不如让它通过视图模型。完成此操作后,观察活动中数据的变化(在您的情况下是购物车中的项目数),并在获得新的数据(或任何数据)后更新textview


使用视图模型的一个优点是——即使您的生命周期所有者(活动或片段)被销毁并重新创建,视图模型的同一实例也会连接到更新的生命周期所有者。这样您就不会丢失应用程序中的当前状态。

是基于
LiveData
CartActivity
中的购物车项目列表吗?如果是这样,当调用
onChanged()
时,您可以简单地使用它来更新
TextView
<?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>