【发布时间】:2018-11-22 06:34:51
【问题描述】:
我正在学习Android + Kotlin,并做一个简单的例子来理解LiveData + ViewModel。这很简单:我有一个根活动和两个片段。 FragmentOne 有两个 EditText。对这些值求和,我需要将结果传递给 ViewModel。然后我在根活动和 FragmentTwo 中都使用观察来查看更改的数据。
FragmentOne
class FragmentOne: Fragment() {
private val model by lazy { ViewModelProviders.of(activity).get(MyViewModel::class.java) }
var resultSum:Int = 0
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater?.inflate(R.layout.fragment_one,container,false)
val btn = view?.findViewById<Button>(R.id.sendToModel)
btn?.setOnClickListener({
val field1 = n1.text.toString().toInt()
val field2 = n2.text.toString().toInt()
resultSum = field1 + field2
model.update()
})
return view
}
}
视图模型
class MyViewModel: ViewModel() {
private val fragment by lazy {FragmentOne()}
private var _result = MutableLiveData<Int>().apply { value = 0 }
val result: LiveData<Int>
get() = _result
fun update(){
_result.value = fragment.resultSum
}
}
观察者根活动
private val resultModel by lazy {ViewModelProviders.of(this).get(MyViewModel::class.java)}
resultModel.result.observe(this, Observer { result -> resultTxt.text = result.toString()})
观察者片段二
private val resultModel by lazy {ViewModelProviders.of(activity).get(MyViewModel::class.java)}
resultModel.result.observe(this, Observer { result -> resultTxt.text = result.toString()})
我检查了var resultSum (Log),它保存了来自 sum 的 Int 值。观察者也在工作(如果我在 ViewModel 中实例化 result.value,则该值可被活动和片段观察到)
感谢您的帮助。
【问题讨论】:
标签: android kotlin android-edittext viewmodel