大家好,这是我对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")
}
}
MainModel.mainViewModel
MainActivity.mainViewModel
是其他实例。您不应该这样使用ViewModel