BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #30213同步于 2016/4/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

RecyclerView notifyItemRangeInserted不更新

fengshi698
2016/4/27镜像同步1 回复
Fragment中使用RecyclerView实现上拉加载更多,可是有时候数据加载了,RecyclerView不会更新,只是偶发现象,说不准那次就不更新了编译器打印log显示数据确实已经加载完成。。。。一碰到这种偶发现象就完全蒙逼了,因为大多数情况下运行没问题,代表代码应该没有错误,猜测是内存问题,但是完全没有解决思路,各位大神求教 public class EveryFragment extends Fragment implements BGARefreshLayout.BGARefreshLayoutDelegate{ private BGARefreshLayout refreshLayout; private RecyclerView recyclerView; private FloatingActionButton fb; private EveryAdapter adapter; private AlphaInAnimationAdapter alpha; private View rootView; private int page = 0; private ShapeLoadingDialog dialog; private AVQuery query; private ArrayList<AVObject> mylist; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { dialog.dismiss(); JUtils.Log(System.currentTimeMillis() + ""); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mylist = new ArrayList<>(); adapter = new EveryAdapter(getActivity(),mylist); alpha = new AlphaInAnimationAdapter(adapter); alpha.setFirstOnly(true); alpha.setDuration(500); alpha.setInterpolator(new OvershootInterpolator(0.5f)); dialog = new ShapeLoadingDialog(getContext()); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (rootView == null){ rootView = inflater.inflate(R.layout.fragment_every,null); refreshLayout = (BGARefreshLayout) rootView.findViewById(R.id.bag_fragment_every); recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_fragment_every); fb = (FloatingActionButton) rootView.findViewById(R.id.fab_every); RecyclerView.LayoutManager lm = new GridLayoutManager(getActivity(),1); recyclerView.setLayoutManager(lm); ScaleInAnimationAdapter alphaAdapter = new ScaleInAnimationAdapter(adapter); alphaAdapter.setFirstOnly(true); alphaAdapter.setDuration(500); alphaAdapter.setInterpolator(new OvershootInterpolator(.5f)); recyclerView.setAdapter(alphaAdapter); // JUtils.Toast(DateUtils.getDate()); refreshLayout = (BGARefreshLayout) rootView.findViewById(R.id.bag_fragment_every); refreshLayout.setDelegate(this); BGARefreshViewHolder holder = new BGANormalRefreshViewHolder(getActivity(),true); refreshLayout.setRefreshViewHolder(holder); query = new AVQuery<>("everydayProducts"); query.orderByDescending("date"); query.whereLessThanOrEqualTo("date", Integer.valueOf(DateUtils.getDate())); query.limit(2); dialog.setCanceledOnTouchOutside(false); dialog.show(); refresh(0,null); fb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { recyclerView.smoothScrollToPosition(0); } }); } ViewGroup parent = (ViewGroup) rootView.getParent(); if (parent != null) { parent.removeView(rootView); } return rootView; } private void initData(final List<AVObject> list) { new AsyncTask<Void,Void,Void>(){ ArrayList<AVObject> datas = new ArrayList<AVObject>(); @Override protected Void doInBackground(Void... params) { JUtils.Log("获取天数" + list.size()); for (AVObject obj:list){ try { AVObject object = new AVObject(); object.put("date",obj.getNumber("date").toString()); datas.add(object); AVRelation relation = obj.getRelation("items"); List<AVObject> list1 = relation.getQuery().find(); for (AVObject test:list1){ JUtils.Log(test.getObjectId()); } JUtils.Log("长度"+list1.size()); datas.addAll(list1); JUtils.Log("总长度"+adapter.getItemCount()); } catch (AVException e) { JUtils.Log("aaaa",e.getCode()+"-----"+e.getMessage()); e.printStackTrace(); } } JUtils.Log(System.currentTimeMillis()+""); return null; } @Override protected void onPostExecute(Void aVoid) { int k = mylist.size(); mylist.addAll(datas); Log.i("aaaaaa","当前长度为" + mylist.size()); adapter.notifyItemRangeInserted(k, datas.size()); JUtils.Log(System.currentTimeMillis() + ""); handler.sendEmptyMessageDelayed(0, 1000); } }.execute(); } @Override public void onBGARefreshLayoutBeginRefreshing(final BGARefreshLayout refreshLayout) { refresh(0, new OnFinishListener() { @Override public void onfinished() { refreshLayout.endRefreshing(); } }); } @Override public boolean onBGARefreshLayoutBeginLoadingMore(final BGARefreshLayout refreshLayout) { page = page + 1; JUtils.Log(page+""); dialog.show(); refresh(page, new OnFinishListener() { @Override public void onfinished() { refreshLayout.endLoadingMore(); } }); return false; } private void refresh(int page, final OnFinishListener listener){ query.skip(page * 2); query.findInBackground(new FindCallback<AVObject>() { @Override public void done(List<AVObject> list, AVException e) { if (listener != null){ listener.onfinished(); } if (e != null) { JUtils.Log(e.getMessage()); dialog.dismiss(); JUtils.Toast("网络错误"); return; } initData(list); } }); } }
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
sollian机器人#1 · 2016/4/28
内存问题只会OOM,不会出现数据加载不出来。 除了上拉加载,还有下拉刷新吧。但是下拉刷新没见清空mylist,重新加载数据啊。 实在不行,试试notifyDataSetChanged看看是否正常。