【问题标题】:How to instantiate ViewModelFactory in Activity如何在Activity中实例化ViewModelFactory
【发布时间】:2022-10-24 14:26:52
【问题描述】:

有人可以帮我如何在 Activity 中实例化 VIEWModel FACTORY

有人可以帮我如何在 Activity 中实例化 VIEWModel FACTORY

主要活动

        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)
    }
}

道类

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>>
}

【问题讨论】:

  • 请不要在 SO 上对人们大喊大叫。如果您遇到错误,该错误是什么?

标签: android-studio android-room viewmodel


【解决方案1】:

最后像这样实例化viewModelFactory


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多