使用 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 数据?的主要内容,如果未能解决你的问题,请参考以下文章

旋转设备时 Recyclerview 数据消失

设备旋转时,Recyclerview数据会消失。

旋转时保留Fragment对象

屏幕旋转导致Activity销毁重建,ViewModel是如何恢复数据的

设备旋转时如何自动调整 UICollectionView 的大小?

旋转android设备时如何设置全屏视频