Android Recyclerview和NotifyDateSetChanged不';在滚动之前不显示项目

Android Recyclerview和NotifyDateSetChanged不';在滚动之前不显示项目,android,android-recyclerview,android-constraintlayout,Android,Android Recyclerview,Android Constraintlayout,上周,我面对一个奇怪的行为和新的问题与回收者的看法。Recyclerview直到滚动时才显示项目,事实上,在调试之后,我知道调用了notifyDataSetChanged()之后,onbindeViewHolder没有调用 这是我的适配器代码: class CalendarAdapter(val viewModel: CalendarViewModel) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { private l

上周,我面对一个奇怪的行为和新的问题与回收者的看法。Recyclerview直到滚动时才显示项目,事实上,在调试之后,我知道调用了
notifyDataSetChanged()
之后,
onbindeViewHolder
没有调用

这是我的适配器代码:

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 CalendarAdapter(val-viewModel:CalendarViewModel):
RecyclerView.Adapter(){
私有lateinit变量项:列表
fun setData(数据:列表){
项目=数据
notifyDataSetChanged()
}
override fun onCreateViewHolder(父级:ViewGroup,viewType:Int):RecyclerView.ViewHolder{
返回MyViewHolder
}
重写getItemCount():Int{
如果(::items.i初始化){
返回项目。大小
}
返回0
}
}
覆盖onBindViewHolder(holder:RecyclerView.ViewHolder,位置:Int){
//做点什么
}
}
我的活动是这样的:

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)

    }
}
class CalendarFragment:BaseFragment(){
...
做点什么
...
趣味展示列表(列表项:ArrayList){
var适配器=日历适配器(viewModel)
binding.dayPickerRecyclerView.adapter=适配器
binding.dayPickerRecyclerView.layoutManager=getLayoutManager()
adapter.setData(列表项)
}
}
我的活动布局是:

 <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>


我认为适配器和活动一切正常,但为什么直到上下滚动回收器视图时才显示项目

一天之后,我将应用程序周围的所有代码全部删除,然后找到了解决方案。这很愚蠢。 问题是
ConstraintLayout
library

我使用了
ConstraintLayout
version
2.0.0-beta2
,问题就出在这个版本上,所以我降级到了version
2.0.0-beta1
,一切都修复了,就这样!! 我花了一天时间才修好

希望这对您有所帮助并节省您的时间

只用

implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta1'
而不是

implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'

也许您已经找到了导致此问题发生的原因?我也遇到了类似的情况,只是由于MotionLayout的使用,我无法降级ConstraintLayout版本…升级怎么样@脚本找到了修复方法。我混合了toptobttomof和bottomtopof值。出于某种原因,在1.1.3XML中工作得很好,但在2.0.0-betaX中没有。这很好地解决了我的问题。这是我在constraint layout中看到的最愚蠢的错误,并且浪费了很多时间试图调试代码中的错误。事实证明,我并没有想到要尝试最新的图书馆。