登录 立即注册
安币:
查看: 55|回复: 4
打印 上一主题 下一主题

重庆时时彩反倍投技巧| Android自定义下拉刷新上拉加载,android自定义下拉框

[复制链接]

309

主题

309

帖子

1642

安币

手工艺人

跳转到指定楼层
楼主
发表于 4 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文来源:http://www.oneupabq.com/a/www.mycar58.com/

重庆时时彩独胆倍投 www.oneupabq.com,除此之外,在总理力推下,从2014年至今,国务院部门设置的职业资格许可和认定事项已实现“七连消”,累计占到总数70%以上。美国研发人员认为,能远距离识别并摧毁隐形战机的俄罗斯防空系统对此类飞机构成了主要威胁。


        本文实例为大家分享了android自定义下拉刷新上拉加载的具体实现步骤,供大家参考,具体内容如下

        实现的方式是swiperefreshlayout + recyclerview 的viewtype

        首先看效果:

        

        总的思路:

        

        布局文件

[Java] 查看源文件 复制代码
<android.support.v4.widget.swiperefreshlayout
    android:layout_margintop="

        下拉刷新的实现思路

        

        用于测试的model

[Java] 查看源文件 复制代码
public class testmodel {
  private string mtitle;
  private string mdesc;
  private string mtime;

  public testmodel(string mtitle, string mdesc, string mtime) {
    this.mtitle = mtitle;
    this.mdesc = mdesc;
    this.mtime = mtime;
  }
  //...一堆getxxx ,setxxx方法
  //equals必写,添加数据时候用于判断
   @override
  public boolean equals(object o) {
    testmodel model = (testmodel) o;
    if (!mtitle.equals(model.getmtitle())) {
      return false;
    } else if (!mdesc.equals(model.getmdesc())) {
      return false;
    } else if (!mtime.equals(model.getmtitle())) {
      return false;
    }
    return true;
  }

        模拟获取网络数据的代码

[Java] 查看源文件 复制代码
private class getdata {
    int size = 0 ;
    int max = 25; //数据的最大值

    public void setstart(int size) {
      this.size = size;
    }
    //根据size获取指定大小的list,最大不能超过max
    public list<testmodel> initdata(int size) {
      list<testmodel> mdatas = new arraylist<>();
      testmodel model = null;
      for (int i = start; i < ((size + start) > max 

        数据获取并通知初始化recyclerview

[Java] 查看源文件 复制代码
public void initdata() {
    if (getdata == null) {
      getdata = new getdata();
    }
    mlists = getdata.initdata(size); //获取默认显示的数量的item
    mhandler.sendemptymessage(refresh); //通知handler更新
  }

        handler中用于处理第一次显示数据和以后刷新操作的代码

[Java] 查看源文件 复制代码
if (msg.what == refresh) {
if (madapter == null) {
madapter = new oneadapter(mcontext);
madapter.setmdatas(mlists);//设置数据
//...对适配器的设置,这里先省去,免得混淆
mrecyclerview.setlayoutmanager(new linearlayoutmanager(mcontext));
mrecyclerview.setadapter(madapter);
    } else {
     madapter.setmdatas(mlists);
     madapter.cleadncount();
     madapter.notifydatasetchanged();
   }
  initrefresh(); //判断refreshlayout是否在刷新,是的话取消刷新操作 .就不贴代码了显的乱糟糟

        refreshlayout的刷新事件

[Java] 查看源文件 复制代码
mrefresh.setonrefreshlistener(new swiperefreshlayout.onrefreshlistener() {
   @override
   public void onrefresh() {
     new thread(mrunnable).start();//runnable调用了initdata()方法;
   }
   });

        此时就可以对刷新操作做出响应了,与平时使用refreshlayout的操作一样

        上拉刷新的实现思路(主要在适配器中,activity中只需要一个当需要加载更多的时候更新数据源就行)

        

        普通内容的布局

[Java] 查看源文件 复制代码
<

        加载更多的内容布局(默认显示progressbar,没有更多的图标隐藏)

[Java] 查看源文件 复制代码
<

        

        itemcount(因为我们要在最后显示信息,所以item的总数应该是加1,但是也是分情况的:

[Java] 查看源文件 复制代码
@override
  public int getitemcount() {
    if (mdatas.size() > minshowload) { //当前item能将屏幕显示满

      return mdatas.size() + 1; //则默认显示加载或者没有更多
    }
    return mdatas.size(); //如果不能显示满,则不显示加载和没有更多
  }

        getviewtype(根据不同的位置显示不同的type)

[Java] 查看源文件 复制代码
@override
  public int getitemviewtype(int position) {
    if (position == mdatas.size()) {
      return viewtype_load; //最后一个显示加载信息
    }
    return viewtype_content;//否则显示正常布局
  }

        正常内容的viewholder

[Java] 查看源文件 复制代码
//内容布局
  private class contentviewholder extends recyclerview.viewholder {
    private textview mtitle;
    private textview mdesc;
    private textview mtime;
    private imageview mhead;
    private view itemview;

    public contentviewholder(view itemview) {
      super(itemview);
      this.itemview = itemview;
      mtitle = (textview) itemview.findviewbyid(r.id.item_title);
      mdesc = (textview) itemview.findviewbyid(r.id.item_desc);
      mtime = (textview) itemview.findviewbyid(r.id.item_time);
      mhead = (imageview) itemview.findviewbyid(r.id.item_head);
    }
  }

        加载信息的viewholder

[Java] 查看源文件 复制代码
//加载更多的布局  (用于显示正在加载和没有更多
  private class loadmoreviewholder extends recyclerview.viewholder {
    private imageview mimage;
    private progressbar mprogress;
    private textview mmsg;

    public loadmoreviewholder(view itemview) {
      super(itemview);
      mimage = (imageview) itemview.findviewbyid(r.id.load_image);
      mprogress = (progressbar) itemview.findviewbyid(r.id.load_progress);
      mmsg = (textview) itemview.findviewbyid(r.id.load_tv);
    }
  }

        oncreateviewholder中初始化不同的viewholder

[Java] 查看源文件 复制代码
  @override
  public recyclerview.viewholder oncreateviewholder(viewgroup parent, int viewtype) {
    view itemview = null;
    switch (viewtype) {
      case 1:
        itemview = layoutinflater.from(mcontext).inflate(r.layout.load_layout, parent, false);
        return new loadmoreviewholder(itemview);
      case 2:
        itemview = layoutinflater.from(mcontext).inflate(r.layout.item_test, parent, false);
        return new contentviewholder(itemview);
    }
    return null;
  }

        定义一个回调,用于当显示加载的时候通知activity更新数据

[Java] 查看源文件 复制代码
public interface onloadmorelistener {
    void loadmore();
  }
  //全局变量
private onloadmorelistener onloadmorelistener;

        onbindviewholder(对不同的情况进行数据显示)

[Java] 查看源文件 复制代码
@override
  public void onbindviewholder(recyclerview.viewholder holder, int position) {
    if (holder instanceof contentviewholder) {
      testmodel model = mdatas.get(position);
      ((contentviewholder) holder).mtitle.settext(model.getmtitle());
      ((contentviewholder) holder).mdesc.settext(model.getmdesc());
      ((contentviewholder) holder).mtime.settext(model.getmtime());
    } else if (holder instanceof loadmoreviewholder) {
      if (mdatas.size() < itemscount) { //没有更多
        ((loadmoreviewholder) holder).mmsg.settext("没有更多了~~~");
        ((loadmoreviewholder) holder).mprogress.setvisibility(view.gone);
        ((loadmoreviewholder) holder).mimage.setvisibility(view.visible);
      } else {
        onloadmorelistener.loadmore();
        ((loadmoreviewholder) holder).mmsg.settext("正在加载更多....");
        ((loadmoreviewholder) holder).mprogress.setvisibility(view.visible);
        ((loadmoreviewholder) holder).mimage.setvisibility(view.gone);
      }
    }
  }

        加载更多的回调在activity中的使用

[Java] 查看源文件 复制代码
madapter.setonloadmorelistener(new oneadapter.onloadmorelistener() {
    @override
    public void loadmore() {
   //增加数据到数据源中
   //调用adapter的adddata方法
   //更新适配器显示
  }
}

        至此下拉刷新上拉加载就完成了,demo地址:swipetorefreshtest。


分享到:  QQ好友和群 QQ空间 微信
收藏收藏 支持支持 反对反对

9

主题

8766

帖子

-2379

安币

限制会员

沙发
发表于 3 天前 | 只看该作者
不错不错,楼主辛苦了。。。

8

主题

8571

帖子

-2558

安币

限制会员

板凳
发表于 3 天前 | 只看该作者
感谢分享,安卓巴士有你更精彩:lol

4

主题

8912

帖子

-2492

安币

限制会员

地板
发表于 前天 17:50 | 只看该作者
感谢分享,安卓巴士有你更精彩:lol

6

主题

8790

帖子

-2509

安币

限制会员

5#
发表于 14 小时前 | 只看该作者
每次我都积极回帖的,想要安币~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 申请友链|手机版|站点统计|重庆时时彩独胆倍投 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表
小说 小说 小说 小说 小说 小说
小说 小说 小说 小说 小说 小说
小说 小说 小说 小说 小说 小说
河南福彩网 云南时时彩多少分开奖 黑龙江时时彩群 红树林娱乐平台 内蒙古了快三开奖结果
陕西国税在线助手 开奖结果七星彩 云南快乐10分胆拖中奖表 湖南快乐十分开奖 澳元汇率走势图