使用 viewmodel 旋转设备时如何保留我的 edittext 数据?
Posted
技术标签:
【中文标题】使用 viewmodel 旋转设备时如何保留我的 edittext 数据?【英文标题】:how can i keep my edittext data when rotating my device with viewmodel? 【发布时间】:2021-05-27 18:17:54 【问题描述】:大家好,我正在尝试通过旋转手机屏幕来将数据保存在编辑文本中,我知道我可以使用 ViewModel 类来做到这一点,但无论我多么努力,我都无法做到。
//视图模型
class UserViewModel: ViewModel()
lateinit var text:MainFragment
fun data()
text.textInputUserName.editText.toString()
//片段
class MainFragment : Fragment()
private lateinit var mUserViewModel: UserViewModel
mUserViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
mUserViewModel.data()
【问题讨论】:
【参考方案1】:您不应将任何与生命周期相关的组件(例如片段)传递到您的视图模型中,因为它们会导致内存泄漏。
要在旋转时保留EditText
中的文本,请将EditText
的文本作为字符串存储在视图模型中。您应该相应地更新和使用它,以确保即使在方向更改之后也能保留最新的文本。示例:
视图模型
class UserViewModel: ViewModel()
var editTextContent:String = ""
片段
class MainFragment : Fragment()
private val mUserViewModel: UserViewModel by viewModels()// could initialize via kotlin delegated property
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
with(mUserViewModel.editTextContent)
if(isNotEmpty())
editText.text = text
else
text = editText.text
editText.doAfterTextChangededitable-> if(editable!=null) text = editable.toString()
我认为这个codelab 可能对你有帮助。
【讨论】:
以上是关于使用 viewmodel 旋转设备时如何保留我的 edittext 数据?的主要内容,如果未能解决你的问题,请参考以下文章
屏幕旋转导致Activity销毁重建,ViewModel是如何恢复数据的