亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
深州市| 诏安县| 古浪县| 神池县| 论坛| 务川| 德兴市| 峨边| 嘉善县| 礼泉县| 横峰县| 稻城县| 新泰市| 高陵县| 翁牛特旗| 宜昌市| 开远市| 紫云| 牡丹江市| 长岛县| 云南省| 易门县| 甘洛县| 广河县| 印江| 板桥市| 观塘区| 横山县| 罗定市| 聊城市| 义乌市| 宁陕县| 偃师市| 西城区| 株洲县| 乌审旗| 德阳市| 张家港市| 囊谦县| 温州市| 蕉岭县|