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
}
我在回收站视图中使用 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
}