5

したがって、ユーザーのリストを に表示する簡単な実装がRecyclerViewあり、リストは as で照会さViewModelLiveDataます。

問題は、リストが監視されている場合でも、UI が更新されて最新のリスト (呼び出された) を表示しないことusersです。とりあえず、デモユーザーのリストをセットアップしました。

ここに私のビューモデルがあります:

class MainViewModel : ViewModel() {

    private val demoData = listOf(
            User(userName = "Bob", favoriteColor = "Green"),
            User(userName = "Jim", favoriteColor = "Red"),
            User(userName = "Park", favoriteColor = "Blue"),
            User(userName = "Tom", favoriteColor = "Yellow"),
            User(userName = "Lee", favoriteColor = "Black"),
            User(userName = "Xiu", favoriteColor = "Gray")
    )

    private val _users = MutableLiveData<List<User>>()
    val users: LiveData<List<User>>
        get() = _users

    init {
        _users.value = listOf()
    }

    fun loadUsers() {
        _users.value = demoData.toMutableList().apply { shuffle() }
    }
}

そして、私のViewModelの添付フラグメント:

// ...

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)

    viewModel.users.observe(this, Observer {
        mAdapter.notifyDataSetChanged()
    })

    mAdapter = UsersAdapter(viewModel.users.value!!)

    mainRV = view?.findViewById<RecyclerView>(R.id.rv_main)?.apply {
        adapter = mAdapter
        layoutManager = LinearLayoutManager(view?.context)
    }

    viewModel.loadUsers()
}

PSUsersAdapterは通常RecyclerView.Adapterです。

setValueオブザーバーを呼び出すためにユーザーリストを呼び出していることを確認したため、ここに何が欠けているのかわかりません。アダプタの設定が間違っていますか?

4

1 に答える 1