android livedata Observer未通知

问题描述 投票:0回答:1

大家好,这是我对livedata的第一枪,如果您能帮助我找到这位观察员出了什么问题,我将不胜感激

MainActivity中的Observer部分无法接收任何东西,从Dialogfragment和MainModel类到MainViewModel的每件事都可以,并且我已经触发了日志,但是MainActivity中的Observer却没有任何反应



class MainModel {
    private var resultLiveData = MutableLiveData<List<Course>>()
    private val courseList = ArrayList<Course>()
    private val mainViewModel = MainViewModel()
    fun sum(course: Course) {


        courseList.add(course)

        resultLiveData.value = courseList

        Log.d("tag", "$course in model")

        mainViewModel.loadedResult(resultLiveData)

        Log.d("tag", "${resultLiveData.value} in my model")

    }


}
class MainViewModel : ViewModel() {
     var result = MutableLiveData<List<Course>>()

    fun loadedResult(resultData: MutableLiveData<List<Course>>) {
        result = resultData
        Log.d("tag", "main viewModel ${result.value}")
        Log.d("tag", "main viewModel ${resultData.value}")

    }
}
class MainActivity : AppCompatActivity() {

    private lateinit var fragmentManager: FragmentManager
    private lateinit var linearLayoutManager: LinearLayoutManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        linearLayoutManager = LinearLayoutManager(this)
        mainRecyclerView.layoutManager = linearLayoutManager
        fragmentManager = supportFragmentManager

        setupLivedata()
        floatingActionButton.setOnClickListener {
            showAddDialog()
        }

    }


    private fun setupLivedata() {
        val mainViewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
        var myList : ArrayList<Course>

        var myObserver = Observer<List<Course>> {
            observedList -> myList = observedList as ArrayList<Course>
            Log.d("tag", "${myList.size} reached main activity")
            Log.d("tag", "${observedList.size} reached main activity")

        }
        mainViewModel.result.observe(this, myObserver)
    }

    private fun showAddDialog() {
        val inputDialog = InputDialogFragment()
        inputDialog.show(supportFragmentManager, "input")
    }
}



android kotlin android-livedata android-viewmodel
1个回答
1
投票
MainModel.mainViewModelMainActivity.mainViewModel是其他实例。

您不应该这样使用ViewModel

© www.soinside.com 2019 - 2024. All rights reserved.