Android 自定义通用的loadingview实现代码
程序员文章站
2024-02-21 10:07:57
功能
1、显示加载视图,加载失败的时候显示加载失败视图,数据为空时显示数据为空视图,支持为失败视图设置点击事件重新加载数据。
2、支持个性化设置,自定义设置 加载、失败...
功能
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); } }
至于具体的布局和样式文件就不贴了,主要是实现思路,代码
下载请参考源码下载 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: es2016新增内容
下一篇: JAVA算法起步之快速排序实例
推荐阅读
-
Android 自定义通用的loadingview实现代码
-
Android滑动删除数据功能的实现代码
-
不到50行代码实现一个能对请求并发数做限制的通用RequestDecorator
-
Android编程基于自定义View实现绚丽的圆形进度条功能示例
-
实例详解Android自定义ProgressDialog进度条对话框的实现
-
自定义的Troop
泛型类( c++, java和c#)的实现代码 -
Android实现单选与多选对话框的代码
-
Android自定义控件实现icon+文字的多种效果
-
Android listview ExpandableListView实现多选,单选,全选,edittext实现批量输入的实例代码
-
Android实现空心圆角矩形按钮的实例代码