我一直在嘗試制作一個應用程式,它將我的值加倍和三倍到 2 個 textViews,當我使用 viewModel 時,它在所有配置更改中幸免于難。當我將結果型別更改為 MutableLiveData 時,在按下按鈕后,直到我旋轉手機,textView 值才會更改。這是我的 MainFragment
class MainFragment : Fragment() {
private var _binding: MainFragmentBinding? = null
private val binding get() = _binding!!
companion object {
fun newInstance() = MainFragment()
}
private lateinit var viewModel: MainViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = MainFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProvider(this)[MainViewModel::class.java]
binding.textView.text = viewModel.getResults().toString()
binding.textView2.text = viewModel.getResults().toString()
val resultsObserver = Observer<List<Float?>>{
binding.textView.text = it[0].toString()
binding.textView2.text = it[1].toString()
}
viewModel.getResults().observe(viewLifecycleOwner, resultsObserver)
binding.action.setOnClickListener {
if(binding.editTextNumberDecimal.text.isNotEmpty()){
viewModel.setValues(binding.editTextNumberDecimal.text.toString())
}else{
binding.textView.text = getString(R.string.no)
binding.textView2.text = getString(R.string.no1)
}
}
}
}
這是我的 viewModel
class MainViewModel : ViewModel() {
private var input = ""
private var doubleValue = 0f
private var tripleValue = 0f
fun setValues(value: String){
input = value
doubleValue = input.toFloat() * 2
tripleValue = input.toFloat() * 3
}
fun getResults(): MutableLiveData<List<Float?>> = MutableLiveData(listOf(doubleValue, tripleValue))
}
uj5u.com熱心網友回復:
MutableLiveData不會自動對您通過setValues. 您將需要MutableLiveData通過setValue().
為了實作這一點,我建議您將您的存盤在您MutableLiveData的欄位中ViewModel以便能夠訪問它。
例如像這樣:
class MainViewModel : ViewModel() {
private var input = ""
private var doubleValue = 0f
private var tripleValue = 0f
private val results = MutableLiveData(listOf(doubleValue, tripleValue))
fun setValues(value: String){
input = value
doubleValue = input.toFloat() * 2
tripleValue = input.toFloat() * 3
// This updates the value inside your LiveData
results.value = listOf(doubleValue, tripleValue)
}
fun getResults(): MutableLiveData<List<Float?>> = results
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/381265.html
標籤:安卓 视图模型 android-livedata android-架构-组件
