ipe*_*300 5 android viewmodel android-edittext kotlin
我正在研究Android + Kotlin,并提供了一个简单的示例来了解LiveData + ViewModel。这很简单:我有一个根活动和两个片段。FragmentOne有两个EditText。该值相加,我需要将结果传递给ViewModel。然后,我在根活动和FragmentTwo中都使用observe查看更改后的数据。
片段一
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
}
}
Run Code Online (Sandbox Code Playgroud)
viewModel
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
}
}
Run Code Online (Sandbox Code Playgroud)
观察者根活动
private val resultModel by lazy {ViewModelProviders.of(this).get(MyViewModel::class.java)}
resultModel.result.observe(this, Observer { result -> resultTxt.text = result.toString()})
Run Code Online (Sandbox Code Playgroud)
观察者碎片2
private val resultModel by lazy {ViewModelProviders.of(activity).get(MyViewModel::class.java)}
resultModel.result.observe(this, Observer { result -> resultTxt.text = result.toString()})
Run Code Online (Sandbox Code Playgroud)
我检查了var resultSum(对数),并从总和中得出Int值。观察者也在工作(如果我result.value在ViewModel中实例化,则该值对于活动和片段都是可观察的)
感谢您的帮助。
ViewModel 不应引用 Android.* 库。所以你引用 FragmentOne 是一种不好的做法。
更简洁的方法是更改update()函数以接受字符串 -
fun update(result: String){
_result.value = result
}
Run Code Online (Sandbox Code Playgroud)
并更改您的 FragmentOne 代码说-
btn?.setOnClickListener({
val field1 = n1.text.toString().toInt()
val field2 = n2.text.toString().toInt()
resultSum = field1 + field2
model.update(resultSum)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3140 次 |
| 最近记录: |