kHRYSTAL / CircleRecyclerView

the library is a loop RecyclerView(expression), can show some effects when display
714 stars 100 forks source link

设置完数据之后,再次给CircleRecyclerView设置一个新的adapter的时候,无法向左滑动 #8

Closed tdxtxt closed 7 years ago

kHRYSTAL commented 7 years ago

@tdxtxt 感谢回复 请参照sample中MultiModeFragment.java的例子:

mCircleRecyclerView.setNeedLoop(true);

A#getItemCount():

public int getItemCount() {
            return Integer.MAX_VALUE;
        }

如果不能解决问题 可以发一份重现代码

tdxtxt commented 7 years ago

是再次给mCircleRecyclerView设置一个新的adapter的时候出现不能滑动的
重现代码

kHRYSTAL commented 7 years ago

CircleRecyclerView 新增代码:

private boolean mFirstSetAdapter = true;

@Override
    public void setAdapter(Adapter adapter) {
        super.setAdapter(adapter);
        if (mFirstSetAdapter) {
            mFirstSetAdapter = false;
        } else {
            if (adapter != null)
                mPostHandler.sendEmptyMessage(0);
        }
    }

不建议重新setAdapter(adapter) 目前可以解决重新设置adapter导致回滚到第一项的问题

tdxtxt commented 7 years ago

另外想请教一下如何每次刷新都 显示 数据源中的第一条数据呢

kHRYSTAL commented 7 years ago

@tdxtxt 目前能马上想到的两种方式:

  1. 控制数据源 始终持有第一项数据, List, Adapter始终保持一份, 数据的更新删除替换是对List的替换 2.使用 RecyclerView.AdaptergetItemViewType()实现一个header 参考链接
tdxtxt commented 7 years ago

看了你的源码是因为默认位置为Integer.MAX_VALUE >> 1,而这个位置并不一定是数据源中的第一个位置

kHRYSTAL commented 7 years ago

是的, setNeedCenterForce()是为了支持item居中的功能, 默认为true, 在支持"循环"的时候会选中Integer.MAX_VALUE >> 1