ListView中adapter不展示(代码冗余度的问题)

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("surveyState", "=", 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对象.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值