上一篇博客写的存在一些问题,比如上拉数据加载后,数据会回到数据列表的第一个位置,然后虽然我用了
mRecyclerView.scrollToPosition(lastVisibleItem);这个方法,但是会导致一个问题,就是如果不进行上拉加载操作的时候,在别的页面过来,也会自动定位到数据列表的最后一个位置,然后我就换了一种写法mSuperRefreshRecyclerView.moveToPosition(mDataBeanList.size()-1);
然后这种办法依然没有解决我的问题,依然存在数据上拉加载后导致数据定位到第一个位置,我在网上找了一个demo,发现别人能在当前的位置定位是因为没有走adapter
这个适配器方法,而是在上拉加载更多的时候,直接把拿到的数据add进去到集合中,直接把集合丢到adapter适配器中了,而我的接口是多条,进来是一个数据接口,
上拉加载更多是一个数据接口,下拉更新又是一个数据接口,然后我就又新建了一个存放上拉加载更多的数据集合,新建一个联网请求进行数据加载后在把数据add到
最后的集合去,这样就可以解决数据每次进行上拉加载的时候无法定位到当前位置的问题了,上代码
//上拉加载更多 @Override public void onLoadMore() { GetDataNet(true); // mPaipu_tuijian.addData(mDataBeanList); mPaipu_tuijian.notifyDataSetChanged(); mSuperRefreshRecyclerView.setLoadingMore(false); // mSuperRefreshRecyclerView.moveToPosition(mDataBeanList.size()-1); } //下拉刷新 @Override public void onRefresh() { GetDataNet(false); mSuperRefreshRecyclerView.setRefreshing(false); }上拉加载走的联网请求
private void getDataload(String url) { new ClHttpGet(new ClHttpTool.HttpAsynListener() { @Override public void httpGetFinish(ClHttpResult result) { // TODO Auto-generated method stub if (result.getCode() == 200) { String resultStr = result.getResult(); JSONObject resultJson = null; // processdata(resultStr); try { resultJson = new JSONObject(resultStr); if (resultJson.optString("data").equals("")){ }else { if (mCard_tuijian_bean.getData()==null){ }else { mCard_tuijian_bean = JSONparse(resultStr); mDataBeanList_loaddata = mCard_tuijian_bean.getData(); mPaipu_tuijian.addData(mDataBeanList_loaddata); } } } catch (JSONException e) { e.printStackTrace(); } } } }).execute(url); }第一次和下拉刷新走的联网请求public void getData(String url){ new ClHttpGet(new ClHttpTool.HttpAsynListener() { @Override public void httpGetFinish(ClHttpResult result) { // TODO Auto-generated method stub if (result.getCode() == 200) { String resultStr = result.getResult(); processdata(resultStr); // if (refresh) { // DPCache.setData(DPConfig.CommunityHome, resultStr); // } } else { } } }).execute(url); }判断走的是上拉还是下拉还是第一次的url确定
//加载数据 private void GetDataNet(final boolean refresh) { //加载首页推荐数据/2/0 // String url = DPConfig.CardInterList + "/2"+"/"+lastId; String url = DPConfig.CardInterList + "/"+"4"; // String url = "http://dipaiapp.replays.net/brand/app_brand_list/4"; if (refresh) { lastId+=1; url = DPConfig.CardInterList + "/4"+"/" + lastId; // getData(url); getDataload(url); }else { getData(url); } }OK,终于搞定了这个问题