不能使用DataStore实例化共享的ViewModel
创始人
2024-12-27 06:00:33
0次

需要使用特定工厂类来实现

为了在不同的Activity或Fragment中共享DataStore,我们可以使用共享的ViewModel。但是,尝试使用DataStore实例化共享的ViewModel会出现问题,因为DataStore需要运行时参数来初始化。因此,我们需要使用特定的工厂类来实例化共享的ViewModel。

以下是示例代码,演示如何使用工厂类来实例化共享的ViewModel:

首先,我们需要为ViewModel创建一个工厂类。

class DataStoreViewModelFactory(private val dataStore: DataStore) : ViewModelProvider.Factory {
    override fun  create(modelClass: Class): T {
        if (modelClass.isAssignableFrom(DataStoreViewModel::class.java)) {
            @Suppress("UNCHECKED_CAST")
            return DataStoreViewModel(dataStore) as T
        }
        throw IllegalArgumentException("Unknown ViewModel class")
    }
}

注意,该工厂类需要一个DataStore作为参数。

接下来,我们需要重写Activity或Fragment的onCreate方法,在其中实例化并获取共享的ViewModel。

class MyActivity : AppCompatActivity() {

    private val dataStore: DataStore by dataStore(appContext)

    private val viewModel: DataStoreViewModel by viewModels {
        DataStoreViewModelFactory(dataStore)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_my)

        // Use viewModel
        // ...
    }

    // ...
}

可以看到,我们在获取共享的ViewModel时,使用了DataStoreViewModelFactory来进行实例化。

这样就可以正确地使用DataStore并共享ViewModel了。

相关内容

热门资讯

必看攻略辅助器!wpk有那种辅... 必看攻略辅助器!wpk有那种辅助吗,德普之星外卦神器软件平台(真是真的是有辅助器)AI 智能体黑科技...
揭秘攻略辅助挂!wpk有辅助器... 揭秘攻略辅助挂!wpk有辅助器吗,德扑之星到底有挂吗安装(确实存在有辅助挂)AI 智能体黑科技再上新...
我来分享辅助挂!wepoker... AI 黑科技赛道又上新,这款智能处理工具堪称效率开挂,专门面向短视频创作者打造。它打通脚本撰写、AI...
一分钟了解透视挂!wepoke... AI 黑科技赛道又上新,这款智能处理工具堪称效率开挂,专门面向短视频创作者打造。它打通脚本撰写、AI...
2分钟细说透视!智星德州插件最... 您好,2分钟细说透视!智星德州插件最新版本更新内容详解,微扑克真的有挂吗教程(一贯存在有透视)这款游...
科普攻略辅助!wepoker怎... 『标题:当前标题』主打赛后复盘的 AI 游戏攻略黑科技走红,对局总结能力开挂。上传对局回放或者战绩截...
一分钟教你透视!购买的wpk辅... 很多人使用云端 AI 时,都担心购买的wpk辅助在哪里下载、内部资料上传带来隐私风险。这款本地运行的...
我来教教你辅助器!wepoke... 本地部署 AI 黑科技工具迎来新版本,不用上传文件到云端就能完成wepoker高级辅助解析、 AI ...
实测分享辅助器!德普之星辅助正... 您好,实测分享辅助器!德普之星辅助正版,WPK真的有挂下载(原本存在有辅助器)这款游戏可以开挂的,确...
一分钟揭秘!辅助!wepoke... 很多人使用云端 AI 时,都担心wepoker国外版透视、内部资料上传带来隐私风险。这款本地运行的 ...