Closed qianshengta closed 5 years ago
我找到了问题所在,但是因为没有深入去了解,所以也不清楚具体的问题在哪。 我在获取到数据去更新数据时。之前页面因为使用了加载动画,在每次加载更多时都会显示动画,造成屏幕闪烁,所以我更新数据时用的是notifyDataSetChanged。之前我在其他地方用的一直都是线性LinearLayoutManager,一直都没用问题的,但是就是这次使用了GridLayoutManager后导致拖动无法触发记载更多(注:在使用方法上除了LinearLayoutManager、GridLayoutManager的不同外,其他都是一模一样的拷贝过去的)。现在GridLayoutManager我将notifyDataSetChanged换成了setNewData(),加载更多就能正常触发了。
好像又不是GridLayoutManager的问题,我其他代码都不懂,将GridLayoutManager改成LinearLayoutManager依然还是存在这个问题。我在对比下其他正常的代码,看看哪里有不同的
定位问题所在了,是因为添加头的问题。
private void initHeaderAndFooter() {
LayoutInflater layoutInflater = (LayoutInflater) baseActivity.getSystemService(Context
.LAYOUT_INFLATER_SERVICE);
View headView = layoutInflater.inflate(R.layout.head_store, null);
storeAdapter.addHeaderView(headView);//添加头布局
headStore = new HeadStore(headView, baseActivity);
}
这是我添加头的方法,其他方法都不变,有无添加头造成我上门所说问题所在,添加头后,默认就不会开启加载更多,而setNewData方法里就有开启加载更多的方法,具体的原因还不知道。
????@AllenCoder
我即是调用了storeAdapter.setEnableLoadMore(true);也是没有用的@AllenCoder
在添加头之后 storeAdapter.setEnableLoadMore(true);打开是可以的,在添加头之前都是无效的。这说么在添加头后就去关闭了加载更多。是我的使用方法错误了吗?我看官网里的添加头中没有这方面的说明?@AllenCoder
当前版本是2.9.40 问题是我在使用GridLayoutManager布局的时候出现的问题。普通的线性布局不会。 就是当我获得第一页数据后,我手指一直按着屏幕拖动界面到底部了,都还没有触发加载更多的回调(注:这里我调用了storeAdapter.loadMoreComplete(),没有调用storeAdapter.loadMoreEnd())。 但是当我刚进入页面,快速大幅度滑动,手指离开屏幕,后面的距离靠惯性滑动,却是能够触发加载更多的 这里还有一个特殊情况,就是当我进入页面,手指按住拖动到最后,这样如上第一种情况是不会触发加载更多的。但是这样操作之后我再去快速滑动依靠惯性滑动如尚第二种情况,也不会再去触发加载更多了, 只有第一次进入界面就用第二种方法才能出发加载更多(注:这里我调storeAdapter.loadMoreComplete(),依然没有调用storeAdapter.loadMoreEnd())。
以上是我主布局
以上是我item的布局
以上是我添加的Head头布局
以下是我的使用方式
public void initParam() { storeAdapter = new StoreAdapter(baseActivity, R.layout.item_store, list); storeRvCommodity.setLayoutManager(new GridLayoutManager(baseActivity, 2)); storeAdapter.bindToRecyclerView(storeRvCommodity);//等同于recyclerView.setAdapter() storeAdapter.openLoadAnimation();//开启动画 storeAdapter.isFirstOnly(true);//动画是否只执行一次 storeAdapter.setNotDoAnimationCount(10);//设置不显示动画数量 storeAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { ProductList productList = list.get(position); start(CommodityDetailsFragment.newInstance(productList.getId())); } }); // 滑动最后一个Item的时候回调onLoadMoreRequested方法 storeAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() { @Override public void onLoadMoreRequested() { //在加载第一页数据后去加载更多,注,加载第一页数据和加载更多是两个接口 presenter.loadMoreProduct(); } }); //默认第一次加载会进入回调,如果不需要可以配置: storeAdapter.disableLoadMoreIfNotFullPage(); //预加载,当列表滑动到倒数第N个Item的时候(默认是1)回调onLoadMoreRequested方法 storeAdapter.setPreLoadNumber(2); initHeaderAndFooter(); //在加载第一页数据,注,加载第一页数据和加载更多是两个接口 presenter.listProductFirstScreen(false); }
/**