我使用带有 4 个选项卡的底部导航。我想在选项卡1中使用不同的实例加载FragmentA,并在选项卡2中使用不同的实例和不同的viewModel实例加载相同的片段(FragmentA)。我正在使用 Hilt 将存储库注入视图模型中。
现在我面临一个问题,即 FragmentA 正在使用相同的实例加载到选项卡 1 和 2 中。
我尝试使用 FragmentComponent,但无法将存储库注入 ViewModel。
我期待 FragmentComponent 存储库注入视图模型而没有任何问题或任何其他更好的解决方案?
@Module
@InstallIn(FragmentComponent::class)
object ProductUseCaseModule {
@Provides
fun provideGetProductUseCase(
productRepository: ProductRepository
): GetProductUseCase {
return GetProductUseCaseDefault(productRepository)
}
}
@HiltViewModel
Class ProductViewModel @Inject constructor(private val getProductUseCase: GetProductUseCase): ViewModel{
}
@AndroidEntryPoint
Class ProductFragment : Fragment {
private val viewModel : ProductViewModel by viewModels()
}
我在该函数中使用了 ViewModelComponent 和 ViewModelScoped,它在不同的选项卡中创建了新实例。
工作代码:
@Module
@InstallIn(ViewModelComponent::class)
object ProductUseCaseModule {
@ViewModelScoped
@Provides
fun provideGetProductUseCase(
productRepository: ProductRepository
): GetProductUseCase {
return GetProductUseCaseDefault(productRepository)
}
}