Baserecyclerviewadapterhelper: 功能添加建议收集

Created on 24 Mar 2017  ·  96Comments  ·  Source: CymChad/BaseRecyclerViewAdapterHelper

Most helpful comment

希望能加入类似QQ的侧滑菜单功能,目前的侧滑删除感觉不是很好。

All 96 comments

滑动到顶部的时候加载更多,可以做聊天。

BaseMultiItemQuickAdapter 希望增加展开/折叠全部功能,就不用每次都自己写循环了.还有BaseMultiItemQuickAdapter的互斥功能,设置是否开启,开启后展开一个其他的自动收缩.
BaseMultiItemQuickAdapter 展开的item如果在最下方,看不到,自动滚动到可见.
还有getItemPosition()为啥是private的.

希望在BaseViewHolder里面增加个setSelected()方法

希望能添加数据更新功能
比如这样:

    public void listUpdate(final List<T> data, final UpdateCallBack<T> callBack){
        DiffUtil.calculateDiff(new DiffUtil.Callback() {
            @Override
            public int getOldListSize() {
                return getData().size();
            }

            @Override
            public int getNewListSize() {
                return data.size();
            }

            @Override
            public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
                return callBack.areItemsTheSame(getItem(oldItemPosition), data.get(newItemPosition));
            }

            @Override
            public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
                return callBack.areContentsTheSame(getItem(oldItemPosition), data.get(newItemPosition));
            }
        }).dispatchUpdatesTo(this);
    }

希望支持rxJava,不然还要自己在外面包一层

目前添加多个HeadView , 是添加进一个LinearLayout, 在这个容器里面添加views.
如果头部views 很多,长度也比较长,会导致内存消耗过大。
希望可以把添加HeadView 这个功能分离成多个子HeadViewItem,方便视图的回收释放

只监听RequestLoadMoreListener,不显示LoadMoreView

希望能加入类似QQ的侧滑菜单功能,目前的侧滑删除感觉不是很好。

V2.9.12,当加载更多失败时,能否增加上拉重新加载更多功能,而不只是点击重新去加载更多。

希望能增加上拉没有数据,切换跳转下一个条目

希望增加条目的吸顶效果

希望增加单选,多选的功能,感谢陈总!!

@qq781548819 单选和多选是item子view的功能吧?和adapter有什么关系?最近解决了一个人的bug,就是多选复用的问题,如果你需要可以看:https://github.com/Sky0202/About_BRVAH

希望能将加载更多的View对外暴露一下,因为可以通过暴露的View做一些动态展示文字的操作,望采纳!

@XuanJiAndroid 可以自定义加载更多的View,具体可以查看wiki

希望侧滑删除能有个删除按钮,删除操作还是得让用户再确认一下比较好

建议增加一个能自定义下拉刷新的功能,这个还是蛮实用的

@zhuchen1109 下拉刷新和adapter无关。

@skysmileereryday 集成应该不会了,因为这是view做的事情了,但是后续会想办法看能不能配合其他的第三方写个demo。

能做双层列表的购物车?

@ujffdi 可以

@shangdinvxu 有的,具体可以看wiki

使用BaseMultiItemQuickAdapter能不能让第二层的view嵌在第一层的view之间?如果有,具体实现?

@ujffdi 没太明白你的意思,你重新开一个issues,详细的说明一下吧

这个库,不支持 分割线吗 ?直接 在 item 布局 写 1dp 高度 view 的那种?

@chouchouyu 分割线是rv的事情。

仿 iOS的 侧滑希望可以支持

@CymChad 就和商城待付款的雷同。假设item是以订单区分的、第一层是订单、第二层是店铺、第三层是商品;然后item的最后肯定会有付款按钮、但是这按钮不属于任何层级

提个建议就是里面的仿ExpandableListView的效果,能不能,暴露出 获取父级索引的方法?

最近在做优化,把购物车的ExpandableListView改成当前的适配器,效果虽然实现了,但是,取消child的复选框的时候,想把group也取消,发现无法做到,最后自己只能在外面自己实现HashMap 写了好多逻辑才能解决。希望后面能暴露出 获取父级索引的方法

如果当前显示的对象已经拥有父类,那么就无法使用BaseMultiItemQuickAdapter了。

item侧滑删除可以有吗

@coolmaye 仿qq侧滑删除没有,单条侧滑直接删除有demo 。
@HowardWW 恩 是的,你有什么特殊需求吗?
@javalue 默认只显示,headerView或emptyView,如果要同时显示可以同设置isHeadandEmpty,footerView显示和隐藏你可以通过添加或删除来实现。

如果能跟阿里巴巴开源框架VLayout结合起来就更完美啦 https://github.com/alibaba/vlayout

建议增加仿qq 侧滑删除按钮

@PeanutZhang https://github.com/anzaizai/EasySwipeMenuLayout

希望添加databing+BaseMultiItemQuickAdapter 的组合使用方法

现在使用的2.9.22
滑动删除能否暴露控制某个item能否滑动的接口 我希望控制某些type的item不能删除

建议增加headView和emptyView并存的属性

目前setEmptyView后,headView会隐藏

希望增加这种属性,通过true,false控制是否隐藏headView

setEmptyView(emptyView,false);

@386534312 有这个setHeaderAndEmpty

@386534312 文档都有写 http://www.jianshu.com/p/b343fcff51b0

希望ExpandableItem可以在子节点直接获取到父节点是第几个,子节点是第几个

@wilson123 你需要获取的需求是做什么?

@xiaqiuming 已经添加了滑动到顶部加载,具体可以看 文档:http://www.jianshu.com/p/b343fcff51b0
@AndroidJohnsonWang @skysmileereryday 侧滑菜单可以配合https://github.com/anzaizai/EasySwipeMenuLayout 实用
@staticzh 吸附可以配合https://github.com/oubowu/PinnedSectionItemDecoration 实用

你好,BRAH非常好用,封装的也很近乎完美,但是我发现里面缺少ItemDecoration的封装,请问你们后续会考虑添加么

@sweet2o09 目前没有考虑,因为adapter是数据填充,而ItemDecoration和adapter无关,更多是和rv有关。

建议增加一个方法可以在adapter中初始化控件,场景主要为多层recyclerview嵌套,如果下次都要在上次的conver中初始化控件,有性能影响。

ExpandableItem 的删除和添加还是太复杂了。。希望有直接添加/删除父级,并刷新界面的方法。

@CymChad 关于“希望ExpandableItem可以在子节点直接获取到父节点是第几个,子节点是第几个”
我的需求是点击子item后在activity页面中获得position,然后对对应item数据进行更新后再刷新recycleview

@287138531 @wilson123 收到。

希望添加头部或尾部后设置空布局可以让头部和尾部显示出来.经常会碰到这种场景 ,必须有个头部显示在那里,下面显示空布局

@qq517103430 有api可以让头部和空布局以及尾部都显示出来的,具体你可以看文档 :http://www.jianshu.com/p/b343fcff51b0

建议增加一个关闭动画的方法,美工不希望下拉的时候也显示动画,虽然反射可以实现,还是希望直接提供

默认就是不显示动画的 @LambdaV5

美工希望下拉的时候不显示动画,上拉的时候显示动画

如果你想第一页不显示动画可以使用adapter.setNotDoAnimationCount(count); @LambdaV5

为何我试了不起作用

你的动画模式是 @LambdaV5

openLoadAnimation(new ScaleInAnimation(0.8f));

你设置了isFirstOnly(false) ?

没有

那你是不是在此操作之后使用了setNewData?

是的,下拉刷新之后都是调用setNewData

调试发现setNewData之后mLastPosition置为-1,可以考虑将不显示动画的值单独用个变量保存

@CymChad 宇明哥,能否把大家问的问题多保留几天时间,这样大家可以去中间学到一些自己没有遇到的问题。谢谢

@LambdaV5 恩可以的,所以目前可以在setNewData之前设置那个值。 @Troll4it 就算关闭了也不影响大家在issues的搜索框搜索结果,都是能查找到的,1000多个issues还是很有学习价值的。

设置了也会在setNewData里面重新赋值

说错了是之后重置之后

好的

Kotlin代码 Arrlist 数据使用sealed class 的时候,没办法在Adapter中判断想使用的layout ,希望可以支持

sealed class Lessons
data class Words(val name: String, val url: String, val eqclass: String, val time: String) : Lessons()
data class Ppts(val name: String, val url: String,val time:String ,val imgpath: String,val auther: String) : Lessons()
data class Videos(val name: String, val url: String,val time:String ,val id: String,val eqclass: String) : Lessons()

 when (item) {
                is Ppts -> item.url
                is Words -> item.imgpath
                is Videos->item.id
            }

@lishuang08 没办法在Adapter中判断想使用的layout 这句话没搞懂是想表达什么意思?

  1. 没有办法判断什么时候使用哪种布局吗?
  2. 没办法判断当前adapter的layout ?

哪种意思?

如果是kotlin 的多布局 应该这样写

/**
 * 文 件 名: MultipleItemQuickAdapter
 * 创 建 人: Allen
 * 创建日期: 2017/6/14 14:05
 * 修改时间:
 * 修改备注:
 */
class MultipleItemQuickAdapter(context: Context, data: List<MultipleItem>) : BaseMultiItemQuickAdapter<MultipleItem, BaseViewHolder>(data) {

    init {
        addItemType(MultipleItem.TEXT, R.layout.item_text_view)
        addItemType(MultipleItem.IMG, R.layout.item_image_view)
        addItemType(MultipleItem.IMG_TEXT, R.layout.item_img_text_view)
    }

    override fun convert(helper: BaseViewHolder, item: MultipleItem) {
        when (helper.itemViewType) {
            MultipleItem.TEXT -> helper.setText(R.id.tv, item.content)
            MultipleItem.IMG_TEXT -> when (helper.layoutPosition % 2) {
                0 -> helper.setImageResource(R.id.iv, R.mipmap.animation_img1)
                1 -> helper.setImageResource(R.id.iv, R.mipmap.animation_img2)
            }
        }
    }

}


@AllenCoder 之前想用kotlin独有的sealed class (密封类) 方式,不是使用MultiItemEntity接口,没办法在convert中切换R.layout,因为每个item只有到使用的时候才能知道是哪种类型的
只是建议一下,感觉kotlin使用这种多类型的方式比较好(因为一直用data class ,感觉java的类太费劲了)

AbstractExpandableItem 这个类在实现类似qq好友列表时候。我只看到只能一条一条的去移除removeSubItem(int position)和removeSubItem(T subItem),能不能多一个移除所有子数据removeAllSubItem();的方法?还是本来就有的? 看了源码我最后是用了 ((HosptialDep) data.get(position)).getSubItems().clear();实现了清空

希望在调用loadmoreEnd()之后,不调用setNewData也能继续上拉加载更多

@LambdaV5 自己重新开启上拉开关也可以实现,本质上setNewData就是帮你开启了上拉开关。

功能:当数据不满一屏时,开启了上拉加载更多功能,希望不显示loadmoreview,
个人思路:根据目前框架的加载更多方法,在调用时,会传RecyclerView对象进去,
这样是否可以使用RecyclerView设置监听

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
                int firstPosition = linearLayoutManager.findFirstVisibleItemPosition();
                int lastPosition = linearLayoutManager.findLastVisibleItemPosition();
                if (isHideLoadMoreView(firstPosition , lastPosition )) {
                //隐藏页脚
                } else {
                // 可以显示页脚
                }
            }
        });

 private boolean isHideLoadMoreView(int firstPosition, int lastPosition) {
        // 可能需要考虑Header位置
        return firstPosition == 0 && lastPosition == mCourseList.size();
    }

这个情况是 LinearLayoutManager 的情况,其他的暂时没想到。

loadMoreEnd后调用setEnableLoadMore(true)吗?为什么我调了不起作用

这个我想提个功能需求:
当数据不足一屏的时候,显示LoadMoreView布局,允许它占据屏幕剩余高度
请评估下,因为我看了很多应用,在数据未满一屏的时候底部LoadMoreView布局显示"无更多数据"然后是占据剩余屏幕高度,当数据超过一屏的话,该布局又是正常高度

请问如何实现既设置分组布局又设置多布局?应该选择继承哪个adapter呢

@Weimore 你直接使用多布局就好了,分组布局本质上就是多布局。

网格布局加载更多,效果不是很好啊,两列的数据,加载更多只是显示在第一列

@xiaqiuming 你可以新开一个issues,具体说说,你这样的问题描述,我们根本无法解决。

现在多类型的item的方法,在convert(BaseViewHolder helper, MultipleItem item)中,是不是还需要多做一步循环赋值操作,可不可以通过修改获取layout id的方式,而直接继承BaseQuickAdapter来省这一步循环赋值操作 ?

嗯,具体实现,比如这个:https://github.com/qyxxjd/CommonAdapter 里的多布局实现。感觉比现在的多布局实现方式更简便一些。

@Reginer 这种监听式的我们也是支持的具体可见https://github.com/CymChad/BaseRecyclerViewAdapterHelper/issues/968

希望给mHeaderLayout添加一个移出屏幕的监听事件,有时候会有这样的需求:在Header慢慢移出屏幕的时候做动画、或者另外一个View一开始是隐藏的,在Header完全移除屏幕时再显示出来
就像AppBarLayout.OnOffsetChangedListener这个方法差不多

请问有没有 数据筛选的功能?

建议把recyclerview兼容版本或者建议版本写上:
我用“com.android.support:recyclerview-v7:21.0.3”item子控件点击事件会报有方法找不到。
换成最新的“com.android.support:recyclerview-v7:25.3.1”结果item条目一个占满一页,相隔很远(原来的代码)。
后来换了个23.1.1的一切OK,其他版本没有尝试。

建议新增一个方法:判断是否是最后一条item
场景:分割线在item中定义,跟着最后一条item不显示分割线

private boolean isLastPosition(BaseViewHolder helper) {
        int position = helper.getLayoutPosition() - getHeaderLayoutCount();
        position++;
        return position == mData.size();
    }

@Reginer 嗯,我知道Recyclerview可以使用DividerItemDecoration弄分割线,不过我的用法是在item布局中底部添加一条线,在adapter中来控制,是否显示的

建议添加Javadoc 文档 ,谢谢!

希望能把Adapter的功能和刷新、加载更多的功能分开成两个库,方便根据自己的需求选择使用。

@Jusenr ju 有文档, @brick-man 这个我们会考虑。

楼层太高不易阅读,新的建议可以放在 #1688

Was this page helpful?
0 / 5 - 0 ratings