Android Recyclerview和NotifyDateSetChanged不';在滚动之前不显示项目
上周,我面对一个奇怪的行为和新的问题与回收者的看法。Recyclerview直到滚动时才显示项目,事实上,在调试之后,我知道调用了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
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
version2.0.0-beta2
,问题就出在这个版本上,所以我降级到了version2.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中看到的最愚蠢的错误,并且浪费了很多时间试图调试代码中的错误。事实证明,我并没有想到要尝试最新的图书馆。