当前位置: 移动技术网 > 移动技术>移动开发>Android > Android 自定义通用的loadingview实现代码

Android 自定义通用的loadingview实现代码

2019年07月24日  | 移动技术网移动技术  | 我要评论

功能

1、显示加载视图,加载失败的时候显示加载失败视图,数据为空时显示数据为空视图,支持为失败视图设置点击事件重新加载数据。

2、支持个性化设置,自定义设置 加载、失败、空数据视图。

先放一张效果图压压惊

实现

实现思路其实就是一个framelayout里添加三个布局做处理显示隐藏,自定义视图其实就是替换里面的view ,代码比较简单,如果直接看过我的自定义view系列文章,或者对自定义view有所了解,都很容易看懂,所有直接上代码了。

具体代码

java 代码

public class commonloadingview extends framelayout {


  //加载时显示文字
  protected textview mloadingtexttv;
  public context mcontext;
  //加载错误视图
  protected linearlayout mloaderrorll;
  //加载错误点击事件处理
  private loadinghandler mloadinghandler;
  //加载view
  private view loadingview;
  //加载失败view
  private view loadingerrorview;
  //数据为空
  private view emptyview;


  public commonloadingview(context context, attributeset attrs) {
    this(context, attrs, 0);
  }

  public commonloadingview(context context, attributeset attrs, int defstyleattr) {
    super(context, attrs, defstyleattr);
    mcontext = context;
  }

  public void setloadinghandler(loadinghandler loadinghandler) {
    mloadinghandler = loadinghandler;
  }

  public void setloadingerrorview(view loadingerrorview) {
    this.removeviewat(1);
    this.loadingerrorview = loadingerrorview;
    this.loadingerrorview.setonclicklistener(new onclicklistener() {
      @override
      public void onclick(view v) {
        if (mloadinghandler != null) {
          mloadinghandler.dorequestdata();
          commonloadingview.this.load();
        }
      }
    });
    this.addview(loadingerrorview,1);
  }

  public void setloadingview(view loadingview) {
    this.removeviewat(0);
    this.loadingview = loadingview;
    this.addview(loadingview,0);
  }

  @override
  protected void onfinishinflate() {
    super.onfinishinflate();
    loadingview = inflate(mcontext, r.layout.common_loading_view, null);
    loadingerrorview = inflate(mcontext, r.layout.network_layout, null);
    emptyview = inflate(mcontext, r.layout.empty_layout, null);
    this.addview(loadingview);
    this.addview(loadingerrorview);
    this.addview(emptyview);
    loadingerrorview.setvisibility(gone);
    emptyview.setvisibility(gone);
    initview(this);
  }


  public void setmessage(string message) {
    mloadingtexttv.settext(message);
  }


  private void initview(view rootview) {
    mloadingtexttv = (textview) rootview.findviewbyid(r.id.loading_text_tv);
    mloaderrorll = (linearlayout) rootview.findviewbyid(r.id.load_error_ll);
    mloaderrorll.setonclicklistener(new onclicklistener() {
      @override
      public void onclick(view v) {
        if (mloadinghandler != null) {
          commonloadingview.this.load();
          mloadinghandler.dorequestdata();
        }
      }
    });
  }

  public void load(){
    loadingview.setvisibility(visible);
    loadingerrorview.setvisibility(gone);
    emptyview.setvisibility(gone);
  }

  public void load(string message){
    mloadingtexttv.settext(message);
    loadingview.setvisibility(visible);
    loadingerrorview.setvisibility(gone);
    emptyview.setvisibility(gone);
  }


  public void loadsuccess(){
    this.loadsuccess(false);
  }

  public void loadsuccess(boolean isempty){
    loadingview.setvisibility(gone);
    loadingerrorview.setvisibility(gone);
    if (isempty) {
      emptyview.setvisibility(visible);
    }else{
      emptyview.setvisibility(gone);
    }
  }


  public void loaderror(){
    loadingview.setvisibility(gone);
    loadingerrorview.setvisibility(visible);
  }


  public interface loadinghandler{
    void dorequestdata();
  }
}

使用

基本使用

几个基本的 load loaderror loadsucccess方法的使用。

public class defaultviewactivity extends appcompatactivity {

  protected listview mlistview;
  protected commonloadingview mloadingview;
  private list<string> mlist = new arraylist<>();
  arrayadapter adapter;


  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    super.setcontentview(r.layout.activity_default_view);
    initview();
  }

  private void initview() {
    mlistview = (listview) findviewbyid(r.id.listview);
    mloadingview = (commonloadingview) findviewbyid(r.id.loadingview);
    mloadingview.load();

    //设置点击错误视图重新加载事件
    mloadingview.setloadinghandler(new commonloadingview.loadinghandler() {
      @override
      public void dorequestdata() {
        mloadingview.postdelayed(new runnable() {
          @override
          public void run() {
            for (int i = 1; i <=20 ; i++) {
              mlist.add(i+"");
            }
            adapter = new arrayadapter(defaultviewactivity.this, android.r.layout.simple_list_item_1, android.r.id.text1, mlist);
            mlistview.setadapter(adapter);
            mloadingview.loadsuccess(false);
          }
        },2500);
      }
    });

    //模拟网络错误,加载失败
    mloadingview.postdelayed(new runnable() {
      @override
      public void run() {
        mloadingview.loaderror();
      }
    },2500);


  }
}

自定义视图 使用

只需要把自己自定义的view调用set方法设置进去即可。

this.mloadingview.setloadingview(loadingview);
this.mloadingview.setloadingerrorview(loadingerrorview);
public class customviewactivity extends appcompatactivity {

  protected listview mlistview;
  protected commonloadingview mloadingview;
  private list<string> mlist = new arraylist<>();
  arrayadapter adapter;


  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    super.setcontentview(r.layout.activity_default_view);
    initview();
  }

  private void initview() {
    mlistview = (listview) findviewbyid(r.id.listview);
    mloadingview = (commonloadingview) findviewbyid(r.id.loadingview);


    //设置自定义视图
    progressbar progressbar = new progressbar(this);
    this.mloadingview.setloadingview(progressbar);
    textview textview = new textview(this);
    textview.settext("加载失败...");
    this.mloadingview.setloadingerrorview(textview);

    mloadingview.load();

    //设置点击错误视图重新加载事件
    mloadingview.setloadinghandler(new commonloadingview.loadinghandler() {
      @override
      public void dorequestdata() {
        mloadingview.postdelayed(new runnable() {
          @override
          public void run() {
            for (int i = 1; i <=20 ; i++) {
              mlist.add(i+"");
            }
            adapter = new arrayadapter(customviewactivity.this, android.r.layout.simple_list_item_1, android.r.id.text1, mlist);
            mlistview.setadapter(adapter);
            mloadingview.loadsuccess(false);
          }
        },2500);
      }
    });

    //模拟网络错误,加载失败
    mloadingview.postdelayed(new runnable() {
      @override
      public void run() {
        mloadingview.loaderror();
      }
    },2500);
  }
}

至于具体的布局和样式文件就不贴了,主要是实现思路,代码

下载请参考 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网