ListView中adapter不展示(代码冗余度的问题)
2017-03-01 16:41
162 查看
WhereBuilder builder = WhereBuilder.b("empNo", "=", UserInfo.getInstance().empNo); builder= builder.and("surveyType", "=", type); builder= builder.and("surveyState", "=", surveyState); try { list = CreditApplication.getDbManager().selector(SurInfo.class).where(builder).findAll(); if(list == null){ list = new ArrayList<SurInfo>(); } if (adapter==null) { adapter = new TaskRecyclerViewAdapter(getContext(), list); recyclerView.setAdapter(adapter); }else { adapter.notifyDataSetChanged(); } if(list.size() == 0){ linear_no_task.setVisibility(View.VISIBLE); }else { linear_no_task.setVisibility(View.GONE); } Log.i(TAG," list size :"+ list.size()); } catch (DbException e) { e.printStackTrace(); } }
以上的这段代码实在 ViewPager中的Fragment里面的代码,作用是每一个Fragment展示出不同的数据.但是每一次当卸载APP后重新安装的时候,在第一次进入这个Fragment的时候总是没有数据.为了解决这个问题对代码进行的单步调试最后得到了无法刷新出数据的结果,以及最后修改之后的方案.
单步调试:
单步调试发现,在当Activity在通过ViewPager装载Fragment的时候,实际上三次进入了这段代码(ViewPager中有三个Fragment),由于请求的数据是异步的,所以耗时操作会放在不好时的操作之后执行,也就是说,当创建Fragment的时候并没有将网络数据获取并且存入数据库中,所以此时的List = null.每一次adapter也是=null的.
当Fragment新建完之后,异步操作开始执行,真实的数据通过接口回调重新进入这段代码中,此时的size = 1;但是adapter显然已经!=null了,于是就直接往eles走了,实际上真实的数据list并没有setAdapter进去.
因此出现了两种修改方式:
方式1:
WhereBuilder builder = WhereBuilder.b("empNo", "=", UserInfo.getInstance().empNo);
builder= builder.and("surveyType", "=", type);
builder= builder.and("surveyState", "=", surveyState);
try {
list = CreditApplication.getDbManager().selector(SurInfo.class).where(builder).findAll();
if(list == null){
list = new ArrayList<SurInfo>();
}
if (adapter==null) {
adapter = new TaskRecyclerViewAdapter(getContext(), list);
recyclerView.setAdapter(adapter);
}else {
adapter = new TaskRecyclerViewAdapter(getContext(), list);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
if(list.size() == 0){
linear_no_task.setVisibility(View.VISIBLE);
}
else {
linear_no_task.setVisibility(View.GONE);
}
Log.i(TAG," list size :"+ list.size());
} catch (DbException e) { e.printStackTrace(); }
方式2:
WhereBuilder builder = WhereBuilder.b("empNo", "=", UserInfo.getInstance().empNo); builder= builder.and("surveyType", "=", type); builder= builder.and("surveyS 4000 tate", "=", surveyState); try { list = CreditApplication.getDbManager().selector(SurInfo.class).where(builder).findAll(); if(list == null){ list = new ArrayList<SurInfo>(); } if(list.size() == 0){ linear_no_task.setVisibility(View.VISIBLE); }else { if (adapter==null) { adapter = new TaskRecyclerViewAdapter(getContext(), list); recyclerView.setAdapter(adapter); }else { adapter.notifyDataSetChanged(); } linear_no_task.setVisibility(View.GONE); } Log.i(TAG," list size :"+ list.size()); } catch (DbException e) { e.printStackTrace(); }
项目中采用了第二种修改方式,减少了代码的冗余,没有去新增不必要的adapter对象.
相关文章推荐
- 关于html5与jsp页面同样的html代码展示的页面效果不一样的问题
- html5与jsp页面同样的html代码展示的页面效果不一样的问题
- 关于html5与jsp页面同样的html代码展示的页面效果不一样的问题
- AXIS1客户端调用CXF服务接口-代码展示和问题解决
- 关于html5与jsp页面同样的html代码展示的页面效果不一样的问题
- [.net training]代码cnBlogsGuestBook 1.0中展示出来的问题
- 关于html5与jsp页面同样的html代码展示的页面效果不一样的问题
- 关于多提交按钮的表单提交问题(用客户端代码判断被点击的按钮)
- 一些常见的问题与解决代码!(精典) 2
- js一些常见的问题与解决代码(2)(转自www.51js.com)
- 解决 MSN Messenger 不能登录的问题 ( 错误代码:80072f19)!
- GDI+托管代码坐标变换矩阵复位问题
- 《设计模式解析》第3章 一个迫切需要灵活代码的问题
- datalist,repeater,datagrid嵌套问题,,解决代码,,总结
- 关于在xslt中集成HTML代码的问题
- 一些常见的问题与解决代码!(精典) 4
- ytht代码在cygwin的移植问题
- 以前没有研究过脚本的使用,所以昨天那个小问题可是让我费了好一番功夫,贴出代码给自己留个纪念!
- 对企业管理软件“代码后”问题的思考
- 不改一行代码定位线上性能问题