Baserecyclerviewadapterhelper: 功能添加

Created on 16 Jun 2016  ·  172Comments  ·  Source: CymChad/BaseRecyclerViewAdapterHelper

很不错的封装,
建议可以添加这些的实现 (1)视差效果。
(2)sticky header的效果。
(3)滑动删除
(4)分组时候的伸缩栏。

btw,我把你这个项目整理进了我的这篇文章,http://www.jianshu.com/p/154891851fe2

Most helpful comment

All 172 comments

我也添加一个吧 加载更多能否设置提前加载 如 滑动到倒数第三个的的Item的时候就开始加载更多

(4)分组时候的伸缩栏。 已经加入下个版本的迭代任务里面了。
(1)视差效果。
(2)sticky header的效果。
(3)滑动删除
这些需要修改adapter之外的东西,所以目前不考虑,以后可能会考虑,谢谢建议。

@shingohu 这个可以,我想想。

@CameloeAnthony 恩好的,多谢。

@CameloeAnthony

虽然功能已经加上了,但是我觉得这个功能的代码,一定程度上面的耦合,比如需要传入RecyclerView。以及一定程度的超出了adapter的范围,需要自定义的Layout。所以不打算添加该功能。最后还是非常感谢你的提议。

@CymChad 哈哈,谢谢你认真的去做了回复我。我会持续关注你的这个库,后期有问题会继续提出来的。顺便,给你的163发过去了一个好友请求

这个能显示瀑布流效果吗?

@baiyinshi 必须能,这是RecyclerView原生的功能!

缺少一个万能的分割线,加上以后你的库就更加完美了,支持上下左右的分割,只是提出个人想法

@xueyaolive 分割线和adapter没关系。。

感谢作者的回复

当超过3种以上类型的Item布局时,比如当第一个item=1时,一种布局,中间Item一种,最后一个item时又是一种布局,滑动时却 空指针 了

@xueyaolive 贴具体使用代码以及crash日志 我demo里面有用三种的例子,你也可以对比一下。

建议作者增加添加多个headerView和FooterView,感谢

@Airsaid #129 有人给出答案了。

我觉得要像ListView那样 支持添加多个header或者footer,可以在Adapter头部或者底部的位置用一个LinearLayout,添加的header或者footer都加到linearLayout里面去,通过这种方法实现 多个headerview 或者footerView

建议给adapter的convert方法加上position参数。有时候用的上吧

@KarnaughK 可以通过 holder.getLayoutPosition 获取

没找着下拉刷新相关的东西啊,需要自己加个SwipeRefreshLayout吗?
还有GridLayoutManager下加载提示会错位,出现在最左边的一个item。

@lolilicker 恩,下拉刷新需要配合第三方的控件,你可以使用瀑布流布局。

@CymChad 楼主问下:
1)滑动删除item,是默认从左向右滑动,有没有什么接口或者方法来使滑动方向从右向左滑动
2)当我添加了header ,滑动删除时,header 作为一个item也被删除了,需要重写什么方法来使header不被滑动删除? 【在你的博客当中有讲到添加header的一些注意事项,不知道是否满足需求】

ItemDragAndSwipeCallback里有个setSwipeMoveFlags()方法可以设置拖拽方向,用法见ItemDragAndSwipeUseActivity.java第104行 @fWX228941

第二个问题看我最新提交,已经修正 @fWX228941

compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.9.1' @fWX228941

建议添加一个加载失败的尾部,点击可进行重新加载。另外,移除头部尾部建议添加remove方法,明了一点

@jituijiaqiezi 恩,多谢建议。后续会进行改进。

compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.9.3' 可支持多个头部和尾部

@jituijiaqiezi 新增了头部尾部的remove方法

@CymChad 建议封装Swipe出现菜单的功能,类似QQ那样的。

@suntao2yl 这个已经超出adapter的范围了,所以十分抱歉。

可以考虑添加动态设置头部布局,因为有可能有时候像banner这种,可能现在配有,但刷新有又没有了,目前是实现不了的,可以考虑添加一个boolean去控制,而不是直接将headerLayout设为null

建议添加一个加载失败的尾部,点击可进行重新加载。

expandable功能是否可以添加呢

@jituijiaqiezi 正在开发中

这个添加头部能不能像添加普通item一样只需要传入viewId呢? 因为屏幕适配,需要onCreateViewHolde中的ViewGroup,或者接口回调一个viewGroup
https://github.com/hongyangAndroid/AndroidAutoLayout

@Deemonser 你要使用的ViewGroup和头部并没有什么关系吧。而且convert(holder, item)方法中可以通过holder.itemView获取你需要的ViewGroup,也可以通过重写onCreateViewHolder()方法获取holder.itemView。

我在自定义的加载失败尾部errorFooterView添加如下代码:
errorFooterView.setOnClickListener(view -> {
adapter.removeFooterView(errorFooterView);
adapter.openLoadMore(true);
});
在请求失败的回调函数调用adapter.addFooterView(errorFooterView).
结果是第一次调用失败会添加这个erroFooterView,但是点击再次加载失败就不会添加这个errorFooterView了,不知道有什么建议

@jituijiaqiezi 请问用的是哪一个版本呢?现在的最新版是1.9.7,如果不是最新版,请先尝试更新。

@shichaohui 呀,几天没看,版本更新这么快,我试试

@shichaohui ok了,谢谢。让人越来越有兴趣了

期待滑动删除,类似QQ那样删除前提示,,和展开列表功能.大神好牛

建议封装Swipe出现菜单的功能,类似QQ那样的。今天尝试了一下午没有成功啊,

如何在convert中得到position 。

@zhaoxiuyu holder.getLayoutPosition();,或者getData().indexOf(item);

请问能跟换下拉刷新的头吗?看gif是官方的下拉刷新。

@missword2012 下拉刷新看组合任意第三方控件,不限于官方的下拉刷新。

很热情- -,star了感谢。

@RuffianZhong 第一,你可以通过在convert方法里面通过viewHolder.getView拿到你的RV,setAdapter即可,第二你说的拿到控件宽高,初始化的时候肯定是拿不到的,这不是该框架问题,如果你用原始的adapter也是一样的,和view绘制流程有关,因为需要一定的时间控件才会被度量(measure)。

@RuffianZhong 获取宽高解决方案你可以看看http://www.2cto.com/kf/201410/341592.html

大神,在item布局里面添加例如checkbox的事件,例如选中第一个然后滑动,就会出现下面的其中某一个也被选中了,再任意滑动列表,里面的数据就乱了,可能又是别的被选中了,这种情况怎么处理啊

@tangchao0106 这是复用机制的问题

继承BaseQuickAdapter,然后在convert写数据.,这个复用机制,怎么修改 啊

@tangchao0106 这不是BaseQuickAdapter的问题,你用普通的adapter都会有,你可以这样。

if(XXX){
    checkbox 设置成选中
}else{
     checkbox 设置成取消选中
}

@tangchao0106 #112 你可以参考一下。

@ChadCym 支持添加动态设置layout和切换layoutmanager的方法,

类似产品页面,可以切换grid和列表的显示方式

@beiliubei 这是recycleView本身的功能setLayoutManger,和adapter无关。

@Kuohui 不一定要知道总数量,我那个判断只是一种判断方式而已,你可以判断页数,或者某一个标示都可以,不要局限于demo的使用方法。

加载失败的尾部,点击可进行重新加载增加没有呢?

@XYScience 这周末 2.0上线。有这个功能。

@CymChad 很好q(≧▽≦q)

测试了下Demo,
在PullToRefreshUseActivity中初始化adapter时,如果我加上
private void initAdapter() {
mQuickAdapter = new QuickAdapter(PAGE_SIZE);
mQuickAdapter.openLoadAnimation(BaseQuickAdapter.SCALEIN);
........

滑动时,每个条目进入屏幕的时候会产生缩放进入的效果.
可是如果我滑动到底部,会加载更多,adapter会notify,那么我看到所有屏幕中展示过的条目都会产生缩放进入的效果.

所以我在RecyclerView中add了滑动的监听,如果处于滑动的状态那么展示这种动画效果,此外在数据重新填充后关闭动画效果,在原始BaseQuickAdapter中添加了一个方法来设置开启和关闭动画效果的方法.

作者是否也可以给出这样的方案,即我默认设置了动画效果,但是仅对滑动时产生,在数据重新notify后关闭,

另外我试图采用第三方的RecyclerView,如XRecyclerView,发现adapter冲突,类型不一致,

请问这个框架是否适用于其他第三方的RecyclerView,还是仅适用于原生的RecyclerView.

我使用XRecyclerView是看到有其有默认的下拉刷新和上拉加载,而且可以设置头尾刷新的动画效果.

@i25net 动画默认只执行一次,没有试过第三方RecyclerView,本adapter框架,只支持上拉加载更多,不支持下拉加载。下拉加载可以随意组合第三方库进行使用。

@i25net 我看了下你说的XRecyclerView,90+个Issues,2个月没有维护了。这样的库,我们不会进行特意的支持。

@CymChad 哦.你的回复很快吗,没关系,我也尝试的解决了些问题,我写了两个方案,一个XRecyclerView,默认实现了下拉和上拉,但是用了你框架中的动画效果,另一个方案就是直接采用系统的RecyclerView,使用你的框架adapter,显然adapter里的代码精简了许多.在activity中处理了滑动的事件.效果一样.

@i25net 👍,我每天都会看github,每天都会解决Issue,我们这个项目会持续更新。谢谢关注。

牛逼,我是来支持作者的。先用来看看效果如何

@CymChad 有没有更新文档?

@CymChad 请问什么时候可以加上StickyHead的效果?

已经有扩展库了,结合BRVAH使用的,https://github.com/oubowu/PinnedSectionItemDecoration

添加setEmptyView的时候清除缓存,避免来回切换setEmptyView(不同的view) 显示错乱。谢谢

用pulltorefresh改造的recyclerview,一旦下拉就无法出现底部自动加载?请问作者一般下拉(可自定义下拉布局)是用哪些第三方库呢?

@axkza demo里面就有呀。

@Cenler 默认情况下拖拽是在ItemView上长按来触发,通过设置mToggleViewId,可以改为只有按在某个子View上才会触发拖拽,且可以设置为触摸该View立即开始拖拽,不需要长按

@CymChad 您好,还没有解决我的问题
我操作的流程是 进入一个列表 没有数据显示空的view 然后 断网 刷新 显示错误view, 然后接着再刷新显示空的view (这时候一直应该显示错误的view 不能刷新一次就切换一次view 网络错误的时候是设置的错误view 没有设置空view 为什么会来回切换呢 )再刷新 显示错误view 就这样交替着

@addappcn 解决方案已经更新。

@RuffianZhong 你可以在设置之前,拿到这个EditText对象然后设置。如果还是不可以,你可以试试 mQuickAdapter.notifyItemChanged(0);

@RuffianZhong 你要在改变的时候,去调用notify,你这个错误是,方法调用快了,还没加载完就notify了。

@CymChad ok,解决了,谢谢。

上拉加载更多结束,添加footerView提示用户没有更多了出现问题 这个解决了吗

@weavey 还没,我周末看看。

@CymChad ok 麻烦了

2.0可以和1.0兼容吗,全部替换的话,工作量有点大,想一部分一部分的替换。

@bobingxin 不能一部分一部分换,2.0改动比较大的地方:点击事件,上拉刷新,其他都没变。建议你有时间的时候换。

item有两层,控制显示隐藏后出现点击事件穿透的问题。怎么解决。

你使用的版本号是? @bobingxin

2.0.8

已收到反馈,正在着手修复中

@bobingxin compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v2.0.9'

@CymChad 问题还存在。

@bobingxin 你好,问题已跟进 ,修复版本2.0.9没有解决你的问题吗?请详细描述这个问题好吗?

默认显示的时候点击事件没有穿透,但是当控制一次显示隐藏后,就会出现点击穿透事件。
if(shopCartSection.isEdit){ baseViewHolder.setVisible(R.id.rl_content,false); baseViewHolder.setVisible(R.id.rl_edit,true); }else{ baseViewHolder.setVisible(R.id.rl_content,true); baseViewHolder.setVisible(R.id.rl_edit,false); }

提个小问题 在添加头部的情况下 Adapter.setSpanSizeLookup 回调索引与 getItemViewType 不对应, 回调的时候减掉了 getHeaderLayoutCount 值

@bobingxin 数据层控制代码贴一下 ?我这边模拟你的情况测试一下

@Cenler 恩是的,我做过处理,你是要对herader做spansize的处理?

数据层控制代码
if(!section.isEdit) { //编辑两字 section.isEdit = true; }else{ //完成两字 section.isEdit = false; } mAdapter.notifyDataSetChanged();

布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/rl_content" android:layout_width="match_parent" android:layout_height="100dp"> <TextView android:layout_width="wrap_content" android:layout_height="100dp" android:text="删除abcdcddc" /> </RelativeLayout> <RelativeLayout android:id="@+id/rl_edit" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_alignParentRight="true" android:layout_width="50dp" android:layout_height="100dp" android:gravity="center" android:text="删除" /> </RelativeLayout> </FrameLayout>

不是Header, 自己定义的布局类型. setSpanSizeLookup 回调时的索引有减去 header 但在getItemViewType里的处理逻辑并不是对应的关系, 假设获取Header下第一个布局的布局类型实际上返回的还是HeaderItemViewType @CymChad

@Cenler 我明白了,我是demo里面是itemType绑定在data里面,所以做了处理没问题,你是用adapter通过position去获取itemType所以会出现需要+1才正常的情况。

@bobingxin compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v2.1.0'

@CymChad @AllenCoder 刚试了问题还是存在的。

@bobingxin 录制gif ,这边测试结果是没有问题的。

@CymChad 我发送了视频到你的qq邮箱,你查收一下。

@bobingxin 已收到。

@bobingxin 模拟你的案例测试,依然没有 问题,没有发生事件穿透 ,发现你的数据控制层是否写的有问题 if(!section.isEdit) { //编辑两字 section.isEdit = true; }else{ //完成两字 section.isEdit = false; } mAdapter.notifyDataSetChanged();这里不应该是一个逻辑判断 ,而是应该在两个不同的 childId 触发下 执行 onItemChildClick不同的代码

@Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                super.onItemChildClick(adapter, view, position);
                switch (view.getId()) {
                    case R.id.btn1:
                        Log.d(TAG,"onItemChildClick: "+"btn1");
                        list.get(position).setEdit(false);
                        break;
                    case R.id.btn2:
                        Log.d(TAG,"onItemChildClick: "+"btn2");
                        list.get(position).setEdit(true);
                        break;
                    default:
                        break;

                }
                adapter.notifyDataSetChanged();
            }

类似于这种写法,你是否将 childId 的控制事件变成了同一个了?

我发现问题所在了,原因是这的,我设置显示和隐藏的时候,设置的父控件的显示隐藏,子控件没有设置。只有设置了子控件的显示和隐藏才能避免点击事件的穿透问题。

ok,问题修复就好

@CymChad 求助,改成version2.1.0后, 安照demo写的, 加载更多功能,获取到数据后 调用 mAdapter.addData(data) 后,loadingView 还在显示,没有刷新数据。 我改成 mAdapter.getData().addAll(data);mAdapter.dataAdded(); 才能正常, 很奇怪不知道为什么。

demo里面是正常运行的。你可以检查你下你的代码和demo里面的代码是否有差异的地方

TextView priceTextView = holder.getView(R.id.price);
priceTextView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);

在BaseViewHolder里面可否加个setFlags的,就是想给文字加个下划线的效果,结果还得把VIEW拿出来自己添加.要是有链式方法加也行啊. 呵呵

使用了adapter.isFirstOnly(false);
然后动画使用了BaseQuickAdapter.SCALEIN
这样在加载更多的时候,会导至页面一闪,所有显示的数据全都一闪.
我将adapter.isFirstOnly(false); 这个删掉了就好些.虽然有一点闪,但不影响我鼠标操作数据.
这个是否能改进一下的?

这个组件帮我大忙了, 网上找了不少组件,什么要嵌套Scrollview太多问题 .重新reyclyView也有问题 .
用这个慢慢摸索,一晚上搞定了我所有问题 .谢谢你们!!!

@lifetin BaseViewHolder里面可否加个setFlags?正在考虑支持让开发者扩展BaseViewHolder,这样可以避免BaseViewHolder的无限增大的情况也会更加灵活。第二个问题,你的版本号是多少?如果不是最新的版本请切换到最新的版本号,因为你说的问题,我记得我已经修复过了的。感谢你的使用。

请问,我下拉刷新列表数据,整个界面会闪一下,这个有什么方式处理没?
mAdapter.setNewData(DataServer.getSampleData(limit));
mAdapter.removeAllFooterView();
mSwipeRefreshLayout.setRefreshing(false);

这个说明没有重用刷新之前的ViewHoder视图,我看Demo里面也有这个问题

@CymChad 楼主问下:
需求:当用户手动滑动删除一条item时,在滑动伊始onItemSwipeStart()回调方法中弹出一个提示框,并制止滑动,只有用户点击确认删除按钮,滑动删除继续,否则不滑动。
问题:有没有什么方法可以有效制止滑动状态由滑动变为不滑动,用户行为可否被改变,或者用户行为能否延迟加载?。disableSwipeItem()只用来区分用户可滑动与不可滑动。

@CymChad
是最新版的呢,引用线上最新版的了.

@CymChad 楼主问下:一起提吧!
就是关于上拉记载的,有没有什么方法可以使正在上拉加载的进度条在没有数据的情况下【比如突然断网,导致的从服务器索取数据失败】停止加载并隐藏,让用户可以再次触发上拉行为。

  this.mNextLoadEnable = false;  //这个到时有,不过是用于区别是否可以继续滑动
  this.mLoadingMoreEnable = false; //貌似没有相关的方法

@myheat 你应该是动画设置了重复显示。isFirstOnly

@fWX228941 第一个问题, https://github.com/CymChad/BaseRecyclerViewAdapterHelper/issues/297 有类似的解答

@lifetin 你可以在最新demo里面试一下,如果还是有问题,你把demo中的使用代码贴一下,我测试一下,这样便于更快的解决问题。

@CymChad 非常感谢解决了问题,不过我没有设置isFirstOnly。我测试发现是我如果mAdapter.openLoadAnimation(BaseQuickAdapter.ALPHAIN);动画就会出现闪一下,就是动画的出现与结果有闪整体的效果,所以不用这种动画就可以了

触摸itemView,都会触发所有按钮的selector,解决了很久,还是解决不了,求帮助,是我使用的问题吗? 现在是一个item布局,本身可以点击也设置了selector,这个布局还有两个button,也设置了selector, 现在点击item布局的任何地方,都会同时触发两个按钮的selector,

目前触摸的selector是基于 itemview 设计的,也就是点击了 childview 会触发 itemview 的selector,下一版本会解决您这个问题。暂时,你的处理办法可以是,基于 childview 的点击回调事件,自己控制 childview 的 selector 状态,也可以稍等后续的修复版本

能不能设置item每一项的间距大小和分割线样式 也提供几个

能添加侧滑菜单的功能嘛~~~

@LeaderChange 这个属于RecyclerView的范围,不属于adapter的范围。

@AmoyJJ 目前没有,你可以使用第三方的库。

话说上拉加载需要注意什么吗。为啥onLoadMoreRequested总是不触发、、、

@gushoubang 这个操作的完全是item布局操作,所以暂时没有这个打算。

需要设置pageSize。

openload已经设置了啊~

@AmoyJJ 你开个新的Issues贴出你的代码,我们具体讨论一下。

我想请教一下,对于拖拽的item,能否控制item不能停放在第一个位置?
备注:
比如我有一个页面9宫格展示数据,第一行第一个是特殊数据,我想要它不能移动(这个我已经实现),不能被其他item替换(这个怎么做呢?)

@RuffianZhong 参考我在#370里的回答

一个小建议:现在有一个需求,在使用Expandable多级展开的时候,每次只能展开一个,其他已经展开的要关闭,就是比如现在item1展开了,我点击item2,此时item2和item1同时处于展开状态,而我要的效果是点了item2,item1可以自动关闭,希望能提供一个api,设置这个功能。我在adapter中加了一个变量去记录上一次展开的position,但还是没法达到我要的效果。

private int alreadyExpandPos;

@Override
protected void convert(final BaseViewHolder holder, MultiItemEntity item) {
    switch (holder.getItemViewType()) {
        case TYPE_LEVEL_0:
            final Level0Item lv0 = (Level0Item) item;
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int pos = holder.getAdapterPosition();
                    if (lv0.isExpanded()) {
                        collapse(pos);
                        alreadyExpandPos = -1;
                    } else {
                        if(alreadyExpandPos != -1) {
                            collapse(alreadyExpandPos);
                        }
                        expand(pos, true);
                        alreadyExpandPos = pos;
                    }
                }
            });
            break;
        case TYPE_LEVEL_1:

            break;
    }

}

@strongmanb 记录pos是不可靠的,展开item时是会改变列表内容的,pos也就随之改变了,建议改为记录Item,即private T lastExpandItem,在需要时使用mData.indexOf(lastExpandItem)来获取pos。

compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.1.8'
Add getLevel() method in IExpandable interface.

可以考虑支持 dataBinding 吗?

恩,这个已经在研发中了。 @zhanaotian

发现下拉刷新的时候 总是会闪一下 这样的体验很不好 感觉就像是用listview的时候数据集clean以后重新加载那种感觉 希望这个能不能改进下

您好~"支持让开发者扩展BaseViewHolder"进展怎样了?很期待啊。毕竟现在adapter里的自定义view只能通过getView来操作很不优雅啊。。。

这周内会上线该功能。 @KarnaughK

compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.4.0' 已经支持对viewholder的扩展了。并且demo新增了databinding使用的案例

@cymChad 为什么说明文档上面还是 1.9.7

@zhaoxiuyu 这是最新的文档地址 https://github.com/CymChad/BaseRecyclerViewAdapterHelper/wiki
因为考虑到1.9.7的改动和2.0使用上很大。所以保留1.9.7的文档。

发现下拉刷新的时候 总是会闪一下 这样的体验很不好 感觉就像是用listview的时候数据集clean以后重新加载那种感觉 希望这个能不能改进下 。。。都不回我= =

@LeaderChange 你重新开个issues

@LeaderChange 我刚测试了一下,是因为demo中是因为开启了动画,openLoadAnimation,去掉就不会有闪的动画了。

那有办法达到开启了动画 但是下拉刷新的时候也不会闪一下吗

2.4.0以后构造多了一个 ViewHolder,
记得把 wiki 里的usage改成新的格式

public class YourAdapter extends BaseQuickAdapter<T, BaseViewHolder> {
    public YourAdapter(int layoutResId, List data) {
        super(layoutResId, data);
    }



    @Override
    protected void convert(BaseViewHolder helper, T item) {

    }
}

@LvWind 多谢提醒,我现在就加上。

可有最新的文档,更新版本后不兼容旧的就不可用了

作者你好,使用中出现一个很奇怪的问题(1.9.7和2.4.6都会)在adapter构造器中打印数据列表是正常的,但是绑定数据的时候(convert中)就出现错误了。列表值少了一个。请问是不是使用中哪里出现错误了?

@RuffianZhong 你重新开一个Issues 把具体的使用代码和错误结果,贴出来,我这边测试一下。

有辦法在設置EmptyView後,在取消嗎?
例如我要重載,但這時候不希望有EmptyView

由于这个issues楼层太高了网速不好的情况下加载都要等很久,我关闭掉这个,重新开一个新增功能的issues,这样便于查看。

请问左滑删除功能什么时候实现呢?

@ping999 一直都可以左滑,ItemDragAndSwipeCallback里有个setSwipeMoveFlags方法详见ItemDragAndSwipeUseActivity

可组合BRVAH使用:https://github.com/anzaizai/EasySwipeMenuLayout 侧滑菜单删除

在使用瀑布流时,addFootView()方法不显示添加的底部控件,这个问题的原因是?

宇明,当数据为空的时候,设置空视图,目前的库判断逻辑是adapter.getData.size()去触发,然后设置空的view,能否添加功能,达到的效果是调用此方法,能够手动去设置空视图,因为有一些场景是空视图会根据不同状态来设置不同的空视图的view,而且此时数据不一定为空,只是没有达到某个条件,谢谢

建议添加一个加载失败时展示布局的方法,现在好多app都有加载中,加载失败,数据为空三种展示效果。

是否可以限制拖拽范围,现在是可以满屏幕拖拽转圈圈都没问题...- -产品觉得这样不太好,提了这个需求

例如只允许横向、纵向拖拽

我找到了。。。
val itemDragAndSwipeCallback = ItemDragAndSwipeCallback(mTemplateSelectedAdapter) itemDragAndSwipeCallback.setDragMoveFlags(ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT)

列表横向排列的情况,头部的宽度不能控制,会 match_parent 整个屏幕,请问横向列表,怎么控制头部的宽度?

Was this page helpful?
0 / 5 - 0 ratings