【问题标题】:how can i keep my edittext data when rotating my device with viewmodel?使用 viewmodel 旋转设备时如何保留我的 edittext 数据?
【发布时间】: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()
}
【问题讨论】:
标签:
android-fragments
viewmodel
android-jetpack
android-viewmodel
screen-rotation
【解决方案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.doAfterTextChanged{editable-> if(editable!=null) text = editable.toString()}
}
我认为这个codelab 可能对你有帮助。