上周,我在回收者视图中遇到了奇怪的行为和新问题。 Recyclerview直到滚动才显示项目,实际上,在调试之后,我知道onbindeViewHolder
在调用notifyDataSetChanged()
之后没有调用。
这是我的适配器代码:
class CalendarAdapter(val viewModel: CalendarViewModel) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private lateinit var items: List<RequestBookingBaseModel>
fun setData(data: List<RequestBookingBaseModel>) {
items = data
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return MyViewHolder
}
override fun getItemCount(): Int {
if (::items.isInitialized) {
return items.size
}
return 0
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
// do something
}
}
我的活动是这样的:
class CalendarFragment : BaseFragment() {
...
do something
...
fun showList(listOfItems : ArrayList<String>){
var adapter = CalendarAdapter(viewModel)
binding.dayPickerRecyclerView.adapter = adapter
binding.dayPickerRecyclerView.layoutManager = getLayoutManager()
adapter.setData(listOfItems)
}
}
而且,我的活动布局是:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/dayPickerRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:clipToPadding="false"
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingEnd="16dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
我认为适配器和活动一切正常,但是为什么直到上下滚动回收器视图后项目才显示?
答案 0 :(得分:3)
一天后,删除整个应用程序中的所有代码,我找到了解决方案。真是愚蠢。
问题是ConstraintLayout
库。
我使用的是ConstraintLayout
版本的2.0.0-beta2
,问题出在这个版本上,所以我降级到了2.0.0-beta1
的版本,一切都已修复,仅此而已!
我花了一天的时间修好。
这可能会有所帮助并节省您的时间。
只需使用
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta1'
代替
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'