我复制了一个带有 Android 架构组件、Retrofit、Dagger 和数据绑定的 MVVM 示例。我将此代码用作我的应用程序的起点,以便开始在 Android 应用程序开发中使用更好的架构。但是,请使用以下代码:
interface ViewModelInjector {
/**
* Injects required dependencies into the specified PostListViewModel.
* @param postListViewModel PostListViewModel in which to inject the dependencies
*/
fun inject(postListViewModel: PostListViewModel)
@Component.Builder
interface Builder {
fun build(): ViewModelInjector
fun networkModule(networkModule: NetworkModule): Builder
}
}
和
class ViewModelFactory(private val activity: AppCompatActivity) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(PostListViewModel::class.java)) {
val db = Room.databaseBuilder(
activity.applicationContext,
AppDatabase::class.java,
"posts"
).build()
@Suppress("UNCHECKED_CAST")
return PostListViewModel(db.postDao()) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
和
abstract class BaseViewModel : ViewModel() {
private val injector: ViewModelInjector = DaggerViewModelInjector
.builder()
.networkModule(NetworkModule)
.build()
init {
inject()
}
private fun inject() {
when (this) {
is PostListViewModel -> injector.inject(this)
}
}
}
主要问题是它卡在PostListViewModel
. 我想以一种动态的方式制作它,接受任何类型的[Name]ViewModel
课程。我确实尝试了一些使用方法Class<T>
,但我不再拥有代码。我也尝试过搜索,但没有得到好的结果。也许我没有搜索合适的术语。我很感激任何指导。