Android 自定义通用的loadingview

丈夫欲遂平生志,一载寒窗一举汤。这篇文章主要讲述Android 自定义通用的loadingview相关的知识,希望能为你提供帮助。
介绍 好久没有写博客啦, 接近新年了, 年前的工作都要收尾, 所以特别忙, 周末抽空写了个通用的加载view,写篇博客分享出来。

功能
1、显示加载视图, 加载失败的时候显示加载失败视图, 数据为空时显示数据为空视图, 支持为失败视图设置点击事件重新加载数据。
2、支持个性化设置, 自定义设置 加载、失败、空数据视图。
先放一张效果图压压惊
Android 自定义通用的loadingview

文章图片

实现 实现思路其实就是一个FrameLayout里添加三个布局做处理显示隐藏, 自定义视图其实就是替换里面的view ,代码比较简单, 如果直接看过我的自定义view系列文章, 或者对自定义view有所了解, 都很容易看懂, 所有直接上代码了。
具体代码
【Android 自定义通用的loadingview】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); } }

至于具体的布局和样式文件就不贴了, 主要是实现思路, 代码
下载请参考源码下载 , 记得点赞哟!
如果我的文章对你有帮助, 随意打赏支持下, 谢谢
Android 自定义通用的loadingview

文章图片


    推荐阅读