CymChad / BaseRecyclerViewAdapterHelper

BRVAH:Powerful and flexible RecyclerAdapter
http://www.recyclerview.org/
MIT License
24.29k stars 5.15k forks source link

notifyItemChanged方法不生效 #3554

Closed LGforgone closed 2 years ago

LGforgone commented 2 years ago
  1. 当前使用的版本号 【3.0.7】
  2. 复现操作描述 在ViewPager2中获取RecyclerView,并设置Adapter,Adapter数据为空,调用adapter的addData()方法添加一页后,修改该页的数据,调用notifyItemChanged方法,在部分手机上不生效。 Android 11 MIUI12.5.8 ViewPager2 版本:androidx.viewpager2:viewpager2:1.0.0 RecyclerView版本:androidx.recyclerview:recyclerview:1.2.1 (在Mini中只有新加第一页会出现这种情况,在pager有两页以上时,notifyItemChanged是正常的,在模拟器上(API30)也有相同的现象,而在另一个华为Mate200 上一切正常,未出现上述现象,系统为鸿蒙2.0.0,)
  3. 使用代码(某个继承了RelativeLayout的自定义View中的部分关键代码) private val pager = ViewPager2(context) private val recyclerView = pager.getChildAt(0) as RecyclerView

    { clipToPadding = false setLayerType(LAYER_TYPE_SOFTWARE, null) pager.orientation = ORIENTATION_VERTICAL pager.clipToPadding = false pager.offscreenPageLimit = 5 pager.setPageTransformer(ViewPagerScale()) addView(pager) val layoutParams = pager.layoutParams as MarginLayoutParams layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT pager.layoutParams = layoutParams pager.adapter = wheelAdapter wheelAdapter.setList(ArrayList()) recyclerView.clipToPadding = false }

    {
        wheelAdapter.addData(page)
    }
    
    {
        wheelAdapter.data[nowPage - 1].layouts.add(layout)
        // 此处调用没有触发调用相对应的convert()方法
        wheelAdapter.notifyItemChanged(nowPage - 1)
    }
  4. gif复现效果

有详细的描述才能使得我们更快速的定位问题并解决问题,感谢配合!

manbuxingkong commented 2 years ago

大佬,你是怎么解决的?