gpt4 book ai didi

android - RecyclerView 在第一次加载时不显示数据

转载 作者:行者123 更新时间:2023-11-29 18:36:36 25 4
gpt4 key购买 nike

我正在尝试使用 LiveData 从本地数据库加载数据列表。

View .xml

... // constraint layout surrounds this
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView_cities"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp" />

下面是我在 Fragment 中设置回收站 View 的方式:

val citiesAdapter = CitiesAdapter(cityRepository)
with(view.recyclerView_cities) {
layoutManager = LinearLayoutManager(activity)
setHasFixedSize(true)
adapter = citiesAdapter
}
cityRepository.getAllCities().observe(this, Observer { list ->
citiesAdapter.submitList(list)
})

适配器:

class CitiesAdapter(private val repository: CityRepository) : ListAdapter<City, CitiesAdapter.CardViewHolder>(CityCallback()) {
class CityCallback: DiffUtil.ItemCallback<City>() {
override fun areItemsTheSame(oldItem: City, newItem: City): Boolean {
return oldItem.city == newItem.city && oldItem.stateId == newItem.stateId
}

override fun areContentsTheSame(oldItem: City, newItem: City): Boolean {
return oldItem.city == newItem.city &&
oldItem.stateName == newItem.stateName &&
oldItem.stateId == newItem.stateId &&
oldItem.selected == newItem.selected
}
}

fun getCityAt(position: Int): City = getItem(position)

// Provide a reference to the views for each data item
class CardViewHolder(cardView: CardView) : RecyclerView.ViewHolder(cardView) {
lateinit var checkBox: CheckBox
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CardViewHolder {
...
}

override fun onBindViewHolder(holder: CardViewHolder, position: Int) {
...
}
}

cityRepository.getAllCities() 从我的数据库返回一个 LiveData>。

我正在使用从 RecyclerView 扩展的 ListAdapter,以便它可以为我管理列表。此外,我正在使用 DiffUtil 以便调用更细粒度的通知,而不仅仅是使用 notifyDataSetChanged。

预期行为:当我加载 fragment 时,RecyclerView 中会显示一个列表,其中包含数据库中的所有城市。

实际行为:当我加载 fragment 时,即使数据库中有城市,也会显示一个空列表。如果我从 fragment 中添加一个新城市,列表中会填充之前存在的所有内容和新添加的项目。

编辑:我将 EditText 入侵到 xml 中,当我从模拟器中单击它时,列表会填充。当我尝试以编程方式单击它时,它不起作用。

最佳答案

我删除了 setHasFixedSize(true) 并按预期加载了数据。任何人都可以解释为什么解决了这个问题吗?

关于android - RecyclerView 在第一次加载时不显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54133757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com