在滚动之前,Recyclerview和notifiydatesetchanged不会显示项目

时间:2019-07-15 11:35:51

标签: android android-recyclerview recycler-adapter android-constraintlayout

上周,我在回收者视图中遇到了奇怪的行为和新问题。 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>

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

1 个答案:

答案 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'