我试图通过在抽象基类中移动一些ViewModel实例来削减Dagger的样板,但是找不到一个很好的方法来做到这一点。我的目的是实例化我的基本片段中的所有ViewModel,以使它们可供所有子片段使用,而无需它们自己进行实例化。我的问题在于使用通用(VM)检索ViewModel-具体在此处:.get(viewModel::class.java)。我也尝试.get(VM::class.java)过不允许
基本片段
abstract class BaseFragment<VM : ViewModel> : Fragment() {
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
lateinit var viewModel : VM
override fun onAttach(context: Context?) {
super.onAttach(context)
viewModel = ViewModelProviders.of(this, viewModelFactory).get(viewModel::class.java)
}
}
Run Code Online (Sandbox Code Playgroud)
ViewModelProviders.get(...)方法签名
public <T extends ViewModel> T get(@NonNull Class<T> modelClass)
Run Code Online (Sandbox Code Playgroud)
这有可能吗?
我正在努力寻找合适的关键字来实现这一目标。
我基本上尝试在“共享”对话框中使用与其他应用程序不同的应用程序名称,这与 Pocket 显示“添加到 Pocket”而不仅仅是“Pocket”的方式几乎相同。
任何帮助将不胜感激=)谢谢