簡體   English   中英

如何從 getIntent 為 EditActivity 的視圖模型設置第一個值

[英]How do I set first values to the viewmodel of EditActivity from getIntent

我有一個 recyclerview 包含有關水果的信息行,如名稱、顏色、重量、描述、匹配的食物......

如果我單擊一個按鈕,它應該將這些行值加載到 Intent 中,並將我帶到 startActivityForResult: EditActivity。

好吧,視圖模型的原因是防止旋轉將值重置回 getIntent 中的值。 值僅在 mainactivity onreturnresultsomething... 方法中更新為 sql。

如果我在 mainactivity oncreate 中執行 '''mviewmodel.name = intent.getStringExtra(name,""):''',那只會在旋轉時覆蓋它,就好像根本沒有視圖模型一樣。

我正在考慮使用共享首選項,但有更好的方法,而 androidviewmodel 是一種反模式。

因此,從 getintent 開始,我如何將默認值添加到編輯活動中的視圖模型,並且它不會在旋轉時設置回原來的值?

謝謝大家!

將您的值放在 [SavedStateHandle] 上: https : //developer.android.com/reference/androidx/lifecycle/SavedStateHandle

mviewmodel.savedStateHandle.set("name",name)

在設置值之前,請檢查它是否為空,例如:

if(mviewmodel.savedStateHandle.get("name) == null){
   mviewmodel.savedStateHandle.set("name",name)
}

您可以從這里查看: https : //developer.android.com/topic/libraries/architecture/viewmodel-savedstate

如果您使用當前的by viewModels或底層的ViewModelProvider模式,您的 ViewModel 將不會被重新創建,因此您可以將其添加為構造函數參數。

查看ViewModelProvider.Factory了解如何做到這一點。 此外,如果您打算使用 Dagger,但仍有參數,您想手動傳入,您可以查看此庫: https : //github.com/halcyonmobile/ViewModelFactoryGenerator

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM