KunMinX / Linkage-RecyclerView

即使不用饿了么订餐,也请务必收藏好该库!🔥 一行代码即可接入,二级联动订餐列表。
3.65k stars 458 forks source link

重新init数据后一级列表点击定位错误问题。 #57

Closed NicodeLee closed 2 years ago

NicodeLee commented 2 years ago

复现步骤,Demo的 MuchPrimaryItemSampleFragment,重新更换数据后滚动的联动是正常的。一级列表的点击有定位问题。

    mBinding.btnPreview.setOnClickListener(v -> {
//      mBinding.linkage.setGridMode(!mBinding.linkage.isGridMode());
      Gson gson = new Gson();
      List<ElemeGroupedItem> items = gson.fromJson(getString(R.string.eleme_json_6_food),
              new TypeToken<List<ElemeGroupedItem>>() {
              }.getType());

      mBinding.linkage.init(items, new MuchLinkagePrimaryAdapterConfig(), new MuchLinkageSecondaryAdapterConfig());
    });
 Gson gson = new Gson();
  //这里换为5
    List<ElemeGroupedItem> items = gson.fromJson(getString(R.string.eleme_json_5_food),
            new TypeToken<List<ElemeGroupedItem>>() {
            }.getType());

    linkage.init(items, new MuchLinkagePrimaryAdapterConfig(), new MuchLinkageSecondaryAdapterConfig());
    });

NicodeLee commented 2 years ago

希望能提供一下解决思路。重新添加的数据跟原来如果有较大差别,一级的三四个位置开始就会有点击定位错误。

KunMinX commented 2 years ago

重新 init 的同时,手动 scrollTo 一级列表到 top 试试

NicodeLee commented 2 years ago

不行,我这边调试调试看

NicodeLee commented 2 years ago

找到问题了。 是mHeaderPositions 这个变量的问题,init的时候方再清空一下mHeaderPositions就可以了。 还有个问题是mFirstVisiblePosition也需要重置一下,不然我这边这种场景容易下标溢出。

  public void init(List<BaseGroupedItem<T>> linkageItems,
                   ILinkagePrimaryAdapterConfig primaryAdapterConfig,
                   ILinkageSecondaryAdapterConfig secondaryAdapterConfig) {

    mFirstVisiblePosition = 0;
    mHeaderPositions.clear();
KunMinX commented 2 years ago

好的,感谢反馈