Android Studio 如何在Activity中示例化ViewModelFactory

vxbzzdmp  于 2022-11-16  发布在  Android
关注(0)|答案(1)|浏览(159)

有人能帮助我如何在Activity中安装ViewModelFactory吗
有人能帮助我如何在Activity中安装ViewModelFactory吗

主要活动

super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val viewModelFactory = DiaryViewModelFactory(diaryDao)
       val viewModel = ViewModelProvider(this).get(DiaryViewModel::class.java)

查看模型工厂

override fun <T : ViewModel> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(DiaryViewModel::class.java)) {
            @Suppress("UNCHECKED_CAST")
            return DiaryViewModel(diaryDao) as T
        }
        throw IllegalArgumentException("Unknown ViewModel class")
    }
}

应用类别

val database : DiaryDatabase by lazy {
        DiaryDatabase.getDatabase(this)
    }
}

DAO类别

interface DiaryDao {
    @Query("SELECT * from diary WHERE id = :id")
    fun getItem(id: Int): Flow<Entry>

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    suspend fun insert(entry: Entry)

    @Update
    suspend fun update(entry: Entry)

    @Delete
    suspend fun delete(entry: Entry)

    @Query("SELECT * from diary ORDER BY id ASC")
    fun getItems(): Flow<List<Entry>>
}
vd2z7a6w

vd2z7a6w1#

最后示例化的viewModelFactory如下所示

val viewModel: DiaryViewModel by viewModels{
        DiaryViewModel.DiaryViewModelFactory((application as DiaryApplication).database.diaryDao())
    }

相关问题