返回信息流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);
}
});
}
}
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #30213同步于 2016/4/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
RecyclerView notifyItemRangeInserted不更新
fengshi698
2016/4/27镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
内存问题只会OOM,不会出现数据加载不出来。
除了上拉加载,还有下拉刷新吧。但是下拉刷新没见清空mylist,重新加载数据啊。
实在不行,试试notifyDataSetChanged看看是否正常。