gpt4 book ai didi

java - ViewModel 构造函数应该用@Inject 注释而不是@AssistedInject

转载 作者:行者123 更新时间:2023-12-04 13:25:48 25 4
gpt4 key购买 nike

我想在运行时使用 Hilt 为 ViewModel 提供一些依赖项。我遵循了 d.android.com this 指导的解决方案.

@HiltViewModel    
public class ViewViewModel extends ViewModel {
...
@AssistedFactory
public interface ViewViewModelFactory {
ViewViewModel create(@Assisted int version);
}

@AssistedInject
public ViewViewModel(ProfileRepository repository, @Assisted int version) {
mProfileRepository = repository;
}
}

@AndroidEntryPoint
public class CarFragment extends Fragment {
@Inject
ViewViewModel.ViewViewModelFactory mViewViewModelFactory;

...

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
ViewViewModel viewModel = mViewViewModelFactory.create(21);
}
}
但是,仍然出现构建错误 ViewModel constructor should be annotated with @Inject instead of @AssistedInject.我正在使用刀柄版本 2.38.1 和 AGP 版本 7.0.0。还尝试了一些早期版本(2.35、2.37)。
我也尝试过创建自己的工厂提供程序,但没有任何运气:
public class ViewViewModel extends ViewModel {
...
@AssistedFactory
public interface ViewViewModelFactory {
ViewViewModel create(@Assisted int version);
}

@AssistedInject
public ViewViewModel(ProfileRepository repository, @Assisted int version) {
mProfileRepository = repository;
}

public static ViewViewModel provideFactory(ViewViewModelFactory assistedFactory,
int version){
return new ViewViewModelFactoryProvider(assistedFactory,version).create(ViewViewModel.class);
}

public static class ViewViewModelFactoryProvider implements ViewModelProvider.Factory {
ViewViewModelFactory assistedFactory;
int version;

public ViewViewModelFactoryProvider(ViewViewModelFactory assistedFactory,
int version) {
this.assistedFactory = assistedFactory;
this.version = version;
}

@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) assistedFactory.create(version);
}
}
}
@AndroidEntryPoint
public class CarFragment extends Fragment {
@Inject
ViewViewModel.ViewViewModelFactory mViewViewModelFactory;

...

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
ViewViewModel viewModel = ViewViewModel.provideFactory(mViewViewModelFactory,21);
}
}

最佳答案

删除 @HiltViewModellink你提到,一个comment表示

In Dagger 2.31, it's possible to achieve the above without using @HiltViewModel and passing everything manually


我看到实现的其余部分已经完成,所以删除 @HiltViewModel应该这样做。

关于java - ViewModel 构造函数应该用@Inject 注释而不是@AssistedInject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68649447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com