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