【问题标题】: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 可能对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 2011-03-16
      • 2020-10-09
      • 2020-08-02
      • 1970-01-01
      相关资源
      最近更新 更多