dataStoreManager使用のViewModelを作るときに必要になった
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider class SettingViewModelFactory( private val dataStoreManager: DataStoreManager ) : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { if (modelClass.isAssignableFrom(SettingViewModel::class.java)) { @Suppress("UNCHECKED_CAST") return SettingViewModel(dataStoreManager) as T } throw IllegalArgumentException("Unknown ViewModel class") } } |
メインでの使い方
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
class MainActivity : ComponentActivity() { // lateinit: 初期化がライフサイクルに依存するオブジェクト: Composeの外部で初期化されるコールバックやマネージャーなどを保持する場合。 private lateinit var dataStoreManager: DataStoreManager override fun onCreate(savedInstanceState: Bundle?) { val splashScreen = installSplashScreen() super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { val context = LocalContext.current.applicationContext dataStoreManager = DataStoreManager(context) val svm: SettingViewModel = viewModel( factory = SettingViewModelFactory(dataStoreManager) ) val settingData by svm.settingData.collectAsState() AdsenteeismCalenderandroidTheme( darkTheme = settingData.darkMood ) { AppNavigation(svm) } } } } |
小規模アプリなら ViewModel 側で直接作ってしまう方法もあります。
class SettingViewModel(
application: Application
) : AndroidViewModel(application) {
private val dataStoreManager =
DataStoreManager(application)
}
すると
val svm: SettingViewModel = viewModel()
だけで動きます。