安卓仿手机网易新闻app项目开发系列之(四)数据分离与填充界面 上

一项目简介和思路

 上次已经实现了数据的抓取和解析,还有轮播视图效果。但是轮播图和itemview的显示数据是一样的,此次我们要做的就是把轮播图和itemview数据分离。大体的思路就是把比如一共提取7条数据,让前三条显示轮播图,后四条显示itemview,这样数据就不会一样了。好了,接下来具体怎么来实现。


二.项目流程

1.数据封装和分离

1)封装banner轮播图数据

public class BannerBean {

    private String[] img_url;
    private String[] title;
    private String[] toUrl;

    public String[] getImg_url() {
        return img_url;
    }

    public void setImg_url(String[] img_url) {
        this.img_url = img_url;
    }

    public String[] getTitle() {
        return title;
    }

    public void setTitle(String[] title) {
        this.title = title;
    }

    public String[] getTourl() {
        return toUrl;
    }

    public void setTourl(String[] tourl) {
        this.toUrl = tourl;
    }

    public BannerBean() {
    }
}
 这里把title、imgurl、tourl及get,set方法封装起来起来,方便后面的banner方法调用。


2)更新数据,分配数据

 private List<Data> item_list;    //item视图数据集合
    private int mPosition;          //记录当前页位置
    private BannerBean mBannerBean; //存储轮播图数据对象
    private int now_num=7;      // 记录当前存放数据条数

// 回调的更新方法
       public void upData(List<Data> [] msg_list) {
        this.msg_list = msg_list;
         initData();
         adapter.notifyDataSetChanged();
    }
      //更新数据,分配数据,填充界面
      public void initData(){
          if(msg_list!=null){

              String[] img=new String[3];
              String[] title=new String[3];
              String[] toUrl=new String[3];
              item_list.clear();//清空缓存
          List<Data> data=msg_list[mPosition];
          for (int i=0;i<3;i++){
              img[i]=data.get(i).getThumbnail();
              title[i]=data.get(i).getTitle();
              toUrl[i]=data.get(i).getUrl();
          }
              mBannerBean.setTitle(title);
              mBannerBean.setImg_url(img);
              mBannerBean.setTourl(toUrl);
           for(int i=3;i<now_num;i++){
                item_list.add(data.get(i));
           }
              adapter.notifyDataSetChanged();
      }
}
 原来的回调更新方法是直接在该方法里写了数据更新,而这里因为我们要实现banner和item数据的分离,为了简化代码,就把它们单独写成intdata()函数里。这部分代码主要是完成更新数据,重写分配数据,把前三条数据分配给banner,数据存放在mBannerBeand对象里。把后四条分配给itemview,存放在item_list里面,然后再进行更新。


3)数据初始化

private void getData() {
          //轮播视图和item数据集合初始化 
          item_list=new ArrayList<>(); //add
          mBannerBean=new BannerBean(); //add
           // 注册本类去监听数据加载变化
          jsonUtils =new JsonUtils(FirstpageFragment.this);//this表示 firstfragment的对象;当前类要监听数据更新的所在类;

          //加载数据
          jsonUtils.getResult();

    }

  这一步还是挺重要的,如果不初始化会导致报空指针,图片不会显示的问题。


4)适配器参数更改

 在firstpageadapter.java文件里更新形参

 public FirstPageAdapter(Context context, List<Data> item_data, BannerBean bean){
           this.mcontext=context;
           this.item_data=item_data;
           this.bean=bean;
    }
 在相应的firstpagefragment.java里也要对应上
 adapter=new FirstPageAdapter(getActivity(),item_list,mBannerBean);
这里的item_list和mbannerbean就是我们上面的2)里更新后等到的数据,然后把他们传入适配器构造方法里,用来后续适配器与视图绑定,在视图上显示我们的数据。

5)数据和视图绑定

//把数据绑定到viewholder
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        //判断holder是不是BannerViewHolder
        if (holder instanceof BannerViewHolder) {
            BannerViewHolder bannerViewHolder = (BannerViewHolder) holder;  // 把指向子类对象的父类引用holder赋给子类的引用 bannerViewHolder,
            //属于向下转换,需要强制转换类型
            //add---------------
            bannerViewHolder.banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE);
            bannerViewHolder.banner.setBannerTitle(bean.getTitle());
            bannerViewHolder.banner.setImages( bean.getImg_url());
            // Log.i("tag","--------------------------onbindview");
        } else if (holder instanceof ItemViewHolder) {
            ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
            itemViewHolder.simpleView.setImageURI(item_data.get(position-1).getThumbnail());//add
            itemViewHolder.textView.setText(item_data.get(position-1).getTitle());// add

 此部分代码主要是实现数据和视图绑定,标add的部分就是改动的地方setbannerstyle(),setbannertitle(),setimages()分别是设置banner的轮播样式,标题和图片资源的方法。这里样式设置的是带有圆形指示器,标题和图片都是来自于我们的网上获取的数据。item部分就是获取一张图片和相应的标题。这里的position-1是因为banner已经占了首位置。

写到这里,我们先运行下简单看下效果:

 


  可以看到,轮播图指示器,标题和item视图的效果都有了。今天内容先讲到这,下次接着讲下拉刷新和上拉加载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值