您的位置:首页 > 编程语言

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对象.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: