功能
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,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,2500); }}
至于具体的布局和样式文件就不贴了,主要是实现思路,代码
下载请参考源码下载 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android 自定义通用的loadingview实现代码全部内容,希望文章能够帮你解决Android 自定义通用的loadingview实现代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)