Android 如果我使用SharedViewModel传递数据,我必须在片段中使用多少视图模型?
我正在使用导航组件,我需要将数据从片段B传递回片段A。我已经从中读取了我需要使用的内容 例如,假设我有一个显示餐厅列表的Android 如果我使用SharedViewModel传递数据,我必须在片段中使用多少视图模型?,android,android-architecture-components,android-viewmodel,android-architecture-navigation,android-jetpack-navigation,Android,Android Architecture Components,Android Viewmodel,Android Architecture Navigation,Android Jetpack Navigation,我正在使用导航组件,我需要将数据从片段B传递回片段A。我已经从中读取了我需要使用的内容 例如,假设我有一个显示餐厅列表的RestaurantListFragment。为了处理这个片段的网络和业务逻辑,我制作了RestaurantListViewModel 第二个片段是RestaurantDetailFragment。为了处理这个片段中的一些操作和业务逻辑,我创建了RestaurantDetailViewModel 现在我需要将数据从RestaurantDetailFragment传递回Resta
RestaurantListFragment
。为了处理这个片段的网络和业务逻辑,我制作了RestaurantListViewModel
第二个片段是RestaurantDetailFragment
。为了处理这个片段中的一些操作和业务逻辑,我创建了RestaurantDetailViewModel
现在我需要将数据从RestaurantDetailFragment
传递回RestaurantListFragment
,据说我需要使用SharedViewModel。但是现在我很困惑
如果我使用SharedViewModel传递数据,那么在一个片段中会有2个ViewModel?在RestaurantDetailFragment
中,我将拥有RestaurantDetailViewModel
和XSharedViewModel
,在RestaurantDetailFragment
中,我将拥有RestaurantListViewModel
和XSharedViewModel
那么在SharedViewModel中,它只包含需要传递回前一个片段的数据
或者我只需要制作一个视图模型(SharedViewModel),它将为我的两个片段提供服务?(我不再需要创建RestaurantDetailViewModel
和RestaurantListViewModel
)。我很困惑 两种方法都有效:
RestaurantDetailFragment
和RestaurantListFragment
之间共享的数据和方法使用SharedViewModel
,并将仅对RestaurantListFragment
而非RestaurantDetailFragment
所需的逻辑保留在中RestaurantListViewModel
,反之亦然RestaurantDetailViewModel
和RestaurantListViewModel
的所有逻辑放在SharedViewModel
中,并去掉其他两个视图模型。虽然这不会抛出任何错误,但它违反了RestaurantDetailFragment
和RestaurantListFragment
之间共享的数据和方法使用SharedViewModel
,并将仅对RestaurantListFragment
而非RestaurantDetailFragment
所需的逻辑保留在中RestaurantListViewModel
,反之亦然RestaurantDetailViewModel
和RestaurantListViewModel
的所有逻辑放在SharedViewModel
中,并去掉其他两个视图模型。虽然这不会抛出任何错误,但它违反了如果您愿意,您可以采用引用形式。您可以拥有一个属于片段的父活动的ViewModel,您可以使用它来处理片段之间的公共数据。每个片段都可以有自己的ViewModel来处理每个片段所需的逻辑。如果这样做,请不要忘记测试进程死亡。您可以有一个属于片段的父活动的ViewModel,并且可以使用它来处理片段之间的公共数据。每个片段都可以有自己的ViewModel来处理每个片段所需的逻辑。如果这样做,不要忘记测试进程死亡。
虽然这不会引发任何错误,但它违反了关注点的分离。
这是什么废话?他们都在经营“餐厅”。显然,他们有着非常相似的担忧。您需要将它们分开的原因是,如果一个细节可以打开一个细节,那么它将导致冲突。这取决于您的抽象级别。如果你考虑餐馆的细节和餐馆的两个不同的问题,那就不是胡说八道。<代码>虽然这不会造成任何错误,但是它违反了关注的分离。< /代码>这是什么废话?他们都在经营“餐厅”。显然,他们有着非常相似的担忧。您需要将它们分开的原因是,如果一个细节可以打开一个细节,那么它将导致冲突。这取决于您的抽象级别。如果你考虑餐馆的细节和餐馆的两个不同的问题,那就不是胡说八道了。