[CymChad/BaseRecyclerViewAdapterHelper]BaseMultiItemQuickAdapter Edittext问题

2024-08-08 238 views
2

大佬你好! demo中,item_expandable_lv2.xml 如果这个布局中含有Edittext,就会导致public int expand(@IntRange(from = 0) int position) { return expand(position, true, true); } 这个方法,默认会保持当前焦点在屏幕上,有可能会在屏幕上方添加子Item,然后就会导致数据错乱问题;

望大佬们有空能关注下此问题,或者默认写死添加子Item时,不考虑焦点问题

回答

6

设置Edittext失去焦点是否可以解决你的问题?

3

恩 ,可以的,我目前是是这么解决的。展示是没有问题的。但是编辑了某个子Item之后还是会有问题

9

编辑之后会有什么问题?

2

同上。。。编辑之后 点击上层的Item 有可能会在屏幕上方添加子Item ,继而导致数据错乱问题

0

不是缓存问题 public int expand(@IntRange(from = 0) int position, boolean animate, boolean shouldNotify) { position -= getHeaderLayoutCount();

    IExpandable expandable = getExpandableItem(position);
    if (expandable == null) {
        return 0;
    }
    if (!hasSubItems(expandable)) {
        expandable.setExpanded(false);
        return 0;
    }
    int subItemCount = 0;
    if (!expandable.isExpanded()) {
        List list = expandable.getSubItems();
        mData.addAll(position + 1, list);
        subItemCount += recursiveExpand(position + 1, list);

        expandable.setExpanded(true);
        subItemCount += list.size();
    }
    int parentPos = position + getHeaderLayoutCount();
    if (shouldNotify) {
        if (animate) {
            notifyItemChanged(parentPos);
            notifyItemRangeInserted(parentPos + 1, subItemCount);
        } else {
            notifyDataSetChanged();
        }
    }
    return subItemCount;
}

这个方法在展开的时候,会保持当前焦点在屏幕上,在焦点上方展开上面一个父Item,而后面再展开其他父item的时候mData.addAll(position + 1, list); 取得position就会不对。 我说的数据错乱指的展开第一个父Item时,可能出现的是第三个父item里面的子item。 当然这些问题在没有edittext时 都是不存在,具体的情况大佬有空可以把自己的Demo中item_expandable_lv2.xml 这个布局中写个edittext试下,真的太难讲清楚了......

2

大佬你好 我用BaseMultiItemQuickAdapter实现多布局时,先是请求接口得到父布局的数据,if (null != mGroupData) { for (RWisdomGroup one : mGroupData) { MultiItemEntity one1 = one; if (null != mChildItemData) { for (RTradeItem two : mChildItemData) { one.addSubItem(two); } } itemEntities.add(one1); } return itemEntities; } 这时候mchildData数据是null,上面遍历完成后给adapter设置数据,父布局正确展示,当点击父布局时在请求子布局数据接口,得到数据后通过适配器的addData方法添加数据,子布局也正确展示,当再次点击相同的父布局时adapter的isExpanded方法仍然返回false,导致无法折叠

这个布局的折叠和展开功能 父布局和子布局的数据必须同时有值吗?

7

@wardenlzr 我试了一下,没有重现你说的问题

6

@Songshuangpeng 请另开issue