基本を設定し、更新して観察できるViewModel
anを保存し、 として保存したいと思います。ArrayList
LiveData
問題は、ビューモデルに添付されたフラグメントが、呼び出し時に ArrayList の変更を検出できないように見えることです.observe
。アプリをデバッグすると、呼び出された ArrayLists2
が実際に更新されていることがわかります。
これが私のViewModelです:
class MainViewModel : ViewModel() {
private val _s1 = MutableLiveData<String>()
private val _s2 = MutableLiveData<ArrayList<String>>()
val s1: LiveData<String>
get() = _s1
val s2: LiveData<ArrayList<String>>
get() = _s2
init {
_s1.value = "HELLO WORLD"
_s2.value = arrayListOf("")
}
fun populateList() {
_s2.value?.clear()
for (i in 10 downTo 1) {
_s2.value?.add("$i bottles")
}
}
}
および添付のフラグメント:
class MainFragment : Fragment() {
companion object {
fun newInstance() = MainFragment()
}
private lateinit var viewModel: MainViewModel
private var message2TV: TextView? = null
// ...
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
message2TV = view?.findViewById(R.id.message_2)
viewModel.s1.observe(this, Observer {
view?.findViewById<TextView>(R.id.message)?.text = it
})
viewModel.s2.observe(this, Observer {
if (it != null && it.isNotEmpty()) {
message2TV?.text = ""
it.forEach { item -> message2TV?.append("\n$item") }
}
})
message2TV?.setOnClickListener {
viewModel.populateList()
}
}
}
viewModel.s2.observe()
デバッグすると、ビューがクリックされた後(およびArrayListが更新された後)、再度呼び出されないこともわかりました。画面の向きを変更した場合にのみ、リストを表示することができます。
ここで何が欠けていますか?