91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

android viewmodelprovider 怎么處理配置變化

小樊
81
2024-11-27 07:51:44
欄目: 編程語言

ViewModelProvider 是 Android Jetpack 中的一個類,用于管理和提供 ViewModel 實例。當設備的配置發生變化(例如屏幕方向、語言或資源變化)時,使用 ViewModelProvider 可以確保您的應用正確地處理這些變化。

以下是處理配置變化時使用 ViewModelProvider 的步驟:

  1. 在您的 ActivityFragment 中,首先獲取一個 ViewModelProvider 實例:
val viewModelProvider = ViewModelProvider(this)
  1. 使用 viewModelProvider.get() 方法獲取您需要的 ViewModel 實例。這將返回一個已創建的 ViewModel(如果已經存在)或創建一個新的 ViewModel(如果不存在):
val myViewModel = viewModelProvider.get(MyViewModel::class.java)
  1. 為了在配置變化時保持 ViewModel 數據,您需要確保 ViewModel 類繼承自 AndroidViewModelAndroidViewModelViewModel 的子類,它接收一個 Application 實例作為參數,并在其構造函數中調用 super(application)。這使得 AndroidViewModel 能夠訪問應用程序的生命周期,從而在配置變化時保持數據:
import androidx.lifecycle.AndroidViewModel

class MyViewModel(application: Application) : AndroidViewModel(application) {
    // ...
}
  1. ActivityFragment 的生命周期方法中(例如 onSaveInstanceState()onCreate()),使用 ViewModelProvider 獲取或重新創建 ViewModel 實例。這將確保在配置變化時始終使用最新的 ViewModel 實例:
override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    val viewModelProvider = ViewModelProvider(this)
    val myViewModel = viewModelProvider.get(MyViewModel::class.java)
    outState.putParcelable("my_view_model", myViewModel)
}

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

    if (savedInstanceState != null) {
        val viewModelProvider = ViewModelProvider(this)
        val myViewModel = viewModelProvider.get(MyViewModel::class.java)
        // 使用已保存的 ViewModel 實例
    } else {
        val viewModelProvider = ViewModelProvider(this)
        val myViewModel = viewModelProvider.get(MyViewModel::class.java)
        // 創建新的 ViewModel 實例
    }
}

通過遵循這些步驟,您可以確保在設備配置發生變化時,使用 ViewModelProvider 管理的 ViewModel 能夠正確地保持和處理數據。

0
石台县| 汝阳县| 绥阳县| 女性| 永安市| 厦门市| 油尖旺区| 长白| 即墨市| 新竹市| 双城市| 和田县| 安庆市| 安西县| 东光县| 汕头市| 交城县| 南康市| 绵竹市| 察雅县| 赤城县| 广灵县| 长岛县| 友谊县| 舒兰市| 临江市| 苗栗县| 左贡县| 柳江县| 宁海县| 宝清县| 雷波县| 仙游县| 定州市| 灵川县| 隆林| 蒲江县| 灌南县| 横山县| 吕梁市| 聂拉木县|