notifyDataSetChanged 不更新视图

notifyDataSetChanged not updating view

我在回收站视图中使用 viewModel,但只有当我进入并存在屏幕而不是屏幕本身时,它才会更新:

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    viewModel = ViewModelProvider(requireActivity()).get(RideDataViewModel::class.java)

    rideList.adapter = MyRideListItemRecyclerViewAdapter(viewModel.rides.value!!, object : OnItemClickListener {
        override fun onItemClicked(ride: RideEntity) {
            viewModel.setRide(ride)
            findNavController().navigate(R.id.rideDataFragment)
        }
    })

    viewModel.rides.observe(viewLifecycleOwner, {

        if (it.isNotEmpty()) 
        {
            no_rides.visibility = View.GONE
           rideList.adapter!!.notifyDataSetChanged() //Function called but no visible data
        }
        else
        {
            no_rides.visibility = View.VISIBLE
        }
    })


    lifecycleScope.launch {
        viewModel.setRides(DataBaseHelper.getAllRidesFromDB())
    }
}

视图模型:

class RideDataViewModel : ViewModel() {
    
        var rides= MutableLiveData<List<RideEntity>>(listOf())
        fun setRides(item: List<RideEntity>) {
            rides.postValue(item)
    }
}

您没有显示您的适配器代码,但您需要在调用 notifyDataSetChanged

之前使用 it 参考设置底层 data/list 的适配器
if (it.isNotEmpty())  {
    no_rides.visibility = View.GONE
    rideList.adapter!!.data = it // something similar to set the list in your adapter to the new values
    rideList.adapter!!.notifyDataSetChanged() //Function called but no visible data
}

您在适配器上的什么位置设置列表?在您的 LiveData 观察器中,您只调用 notifyDataSetChanged(),这只会使 RecyclerView 重绘项目,但您没有先设置项目,因此它没有任何内容可重绘。

我不知道您的适配器看起来如何,但按照下面的代码应该可以更新

if (it.isNotEmpty()) {
    no_rides.visibility = View.GONE
    rideList.adapter!!.list = it              // Update the list in the adapter
    rideList.adapter!!.notifyDataSetChanged() // Now this will have something to draw
}