Jason
Jason
现在是在自定义的LoadMoreView中将 LoadMoreListener设置过去,然后响应“加载失败”的点击事件。 但是这样,SwipeMenuRecyclerView中的isLoadMore这些状态就不对了,没有方法可以设置(但是isLoadError=true,貌似也问题不大)。 自定义的LoadMoreView的相关LoadMoreListener处理: ` public void setLoadMoreListener(SwipeMenuRecyclerView.LoadMoreListener listener) { mLoadMoreListener = listener; } ` ` if (mLoadMoreListener != null) { onLoading(); mLoadMoreListener.onLoadMore(); } `
第一次加载成功,第二次加载更多的时候失败了,SwipeMenuRecyclerView.isLoadError = true; 下次再拉动,SwipeMenuRecyclerView#onScrolled调用了SwipeMenuRecyclerView#dispatchLoadMore,但是由于上面 isLoadError=true,并不会触发loadMore的操作。 isLoadError只有在初始化,或者#loadMoreFinish回调的时候,才会重置为false。 难道我的姿势不对?
我这边也出现了这个问题(3.0.4), `Adapter.setEmptyView(R.layout.empty_view)`(使用的layout id)的调用发生在`RecyclerView.setAdapter(adapter)` 之前,在老版本是可以的,但是3.0.4中是不行的(3.0.4中`setEmptyView(layoutResId: Int)`对`mRecyclerView`进行了判空操作)。 ==>先`RecyclerView.setAdapter(adapter)` ,再`Adapter.setEmptyView(R.layout.empty_view)`,就不会出现这个问题了。(具体原因还没研究。。) ps: 楼主的`setList(null)`也可以规避,即使`Adapter.setEmptyView(R.layout.empty_view)`顺序在前。
`#setDiffNewData`这个使用异步diff `BrvahAsyncDiffer#submitList`,应该是参考的官方的`AsyncListDiffer#submitList`。 但是官方的`AsyncListDiffer#submitList`,其中使用的是 unmodifiable list `mReadOnlyList`(`AsyncListDiffer#getCurrentList`返回的数据源也是这个,外部是不能修改的)。 但是BRVAH目前的使用中,`AsyncListDiffer#submitList`使用的是`val oldList: List = adapter.data`,但是这个`adapter.data`在外部是可以对数据list进行`add/remove`之类的操作的。 这样就导致了当前issue的问题,在后台线程进行diff的过程中,其他地方主线程对`adapter.data`数据源进行`add/remove`操作之后,后台线程处理中的`BrvahAsyncDiffer#submitList`中的`val oldList: List = adapter.data`就被修改了,导致`getOldListSize`是原先的数据总数,但是`oldList#get(index)`时是其他地方主线程更新后的数据list,list的数据已经变了,就有可能导致IndexOutOfBoundsException或者其他问题了。
@limuyang2 @CymChad
错误1 的原因,看源码: ``` fun setEmptyView(layoutResId: Int) { // 此处的mRecyclerView是在#onAttachedToRecyclerView中赋值的(由RecyclerView#setAdapter回调) mRecyclerView?.let { val view = LayoutInflater.from(it.context).inflate(layoutResId, it, false) setEmptyView(view) } } ``` 因此,先调用`RecyclerView#setAdapter`,再`Adapter#setEmptyView`.
我这边也是的。 录了30秒,播放42秒, 但是音频好像是对应的,只有30秒,因此和音视频就不同步了。。。 但是作者貌似没时间维护这个项目了。。。