package com.classic.common;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import java.util.ArrayList;
/**
* 类描述: LoadingLayout
* 创建时间: 2016/1/15 10:20.
*/
@SuppressWarnings("unused")
public class MultipleStatusView extends RelativeLayout {
private static final String TAG = "MultipleStatusView";
private static final RelativeLayout.LayoutParams DEFAULT_LAYOUT_PARAMS =
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
public static final int STATUS_CONTENT = 0x00;
public static final int STATUS_LOADING = 0x01;
public static final int STATUS_EMPTY = 0x02;
public static final int STATUS_ERROR = 0x03;
public static final int STATUS_NO_NETWORK = 0x04;
private static final int NULL_RESOURCE_ID = -1;
private View mEmptyView;
private View mErrorView;
private View mLoadingView;
private View mNoNetworkView;
private View mContentView;
private int mEmptyViewResId;
private int mErrorViewResId;
private int mLoadingViewResId;
private int mNoNetworkViewResId;
private int mContentViewResId;
private int mViewStatus;
private LayoutInflater mInflater;
private OnClickListener mOnRetryClickListener;
private final ArrayList<Integer> mOtherIds = new ArrayList<>();
public MultipleStatusView(Context context) {
this(context, null);
}
public MultipleStatusView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MultipleStatusView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MultipleStatusView, defStyleAttr, 0);
mEmptyViewResId = a.getResourceId(R.styleable.MultipleStatusView_emptyView, R.layout.empty_view);
mErrorViewResId = a.getResourceId(R.styleable.MultipleStatusView_errorView, R.layout.error_view);
mLoadingViewResId = a.getResourceId(R.styleable.MultipleStatusView_loadingView, R.layout.loading_view);
mNoNetworkViewResId = a.getResourceId(R.styleable.MultipleStatusView_noNetworkView, R.layout.no_network_view);
mContentViewResId = a.getResourceId(R.styleable.MultipleStatusView_contentView, NULL_RESOURCE_ID);
a.recycle();
mInflater = LayoutInflater.from(getContext());
}
@Override protected void onFinishInflate() {
super.onFinishInflate();
showContent();
}
@Override protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
clear(mEmptyView, mLoadingView, mErrorView, mNoNetworkView);
if (null != mOtherIds) {
mOtherIds.clear();
}
if (null != mOnRetryClickListener) {
mOnRetryClickListener = null;
}
mInflater = null;
}
/**
* 获取当前状态
*/
public int getViewStatus() {
return mViewStatus;
}
/**
* 设置重试点击事件
*
* @param onRetryClickListener 重试点击事件
*/
public void setOnRetryClickListener(OnClickListener onRetryClickListener) {
this.mOnRetryClickListener = onRetryClickListener;
}
/**
* 显示空视图
*/
public final void showEmpty() {
showEmpty(mEmptyViewResId, DEFAULT_LAYOUT_PARAMS);
}
/**
* 显示空视图
* @param layoutId 自定义布局文件
* @param layoutParams 布局参数
*/
public final void showEmpty(int layoutId, ViewGroup.LayoutParams layoutParams) {
showEmpty(inflateView(layoutId), layoutParams);
}
/**
* 显示空视图
* @param view 自定义视图
* @param layoutParams 布局参数
*/
public final void showEmpty(View view, ViewGroup.LayoutParams layoutParams) {
checkNull(view, "Empty view is null!");
mViewStatus = STATUS_EMPTY;
if (null == mEmptyView) {
mEmptyView = view;
View emptyRetryView = mEmptyView.findViewById(R.id.empty_retry_view);
if (null != mOnRetryClickListener && null != emptyRetryView) {
emptyRetryView.setOnClickListener(mOnRetryClickListener);
}
mOtherIds.add(mEmptyView.getId());
addView(mEmptyView, 0, layoutParams);
}
showViewById(mEmptyView.getId());
}
/**
* 显示错误视图
*/
public final void showError() {
showError(mErrorViewResId, DEFAULT_LAYOUT_PARAMS);
}
/**
* 显示错误视图
* @param layoutId 自定义布局文件
* @param layoutParams 布局参数
*/
public final void showError(int layoutId, ViewGroup.LayoutParams layoutParams) {
showError(inflateView(layoutId), layoutParams);
}
/**
* 显示错误视图
* @param view 自定义视图
* @param layoutParams 布局参数
*/
public final void showError(View view, ViewGroup.LayoutParams layoutParams) {
checkNull(view, "Error view is null!");
mViewStatus = STATUS_ERROR;
if (null == mErrorView) {
mErrorView = view;
View errorRetryView = mErrorView.findViewById(R.id.error_retry_view);
if (null != mOnRetryClickListener && null != errorRetryView) {
errorRetryView.setOnClickListener(mOnRetryClickListener);
}
mOtherIds.add(mErrorView.getId());
addView(mErrorView, 0, layoutParams);
}
showViewById(mErrorView.getId());
}
/**
* 显示加载中视图
*/
public final void showLoading() {
showLoading(mLoadingViewResId, DEFAULT_LAYOUT_PARAMS);
}
/**
* 显示加载中视图
* @param layoutId 自定义布局文件
* @param layoutParams 布局参数
*/
public final void showLoading(int layoutId, ViewGroup.LayoutParams layoutParams) {
showLoading(inflateView(layoutId), layoutParams);
}
/**
* 显示加载中视图
* @param view 自定义视图
* @param layoutParams 布局参数
*/
public final void showLoading(View view, ViewGroup.LayoutParams layoutParams) {
checkNull(view, "Loading view is null!");
mViewStatus = STATUS_LOADING;
if (null == mLoadingView) {
mLoadingView = view;
mOtherIds.add(mLoadingView.getId());
addView(mLoadingView, 0, layoutParams);
}
showViewById(mLoadingView.getId());
}
/**
* 显示无网络视图
*/
public final void showNoNetwork() {
showNoNetwork(mNoNetworkViewResId, DEFAULT_LAYOUT_PARAMS);
}
/**
* 显示无网络视图
* @param layoutId 自定义布局文件
* @param layoutParams 布局参数
*/
public final void showNoNetwork(int layoutId, ViewGroup.LayoutParams layoutParams) {
showNoNetwork(inflateView(layoutId), layoutParams);
}
/**
* 显示无网络视图
* @param view 自定义视图
* @param layoutParams 布局参数
*/
public final void showNoNetwork(View view, ViewGroup.LayoutParams layoutParams) {
checkNull(view, "No network view is null!");
mViewStatus = STATUS_NO_NETWORK;
if (null == mNoNetworkView) {
mNoNetworkView = view;
View noNetworkRetryView = mNoNetworkView.findViewById(R.id.no_network_retry_view);
if (null != mOnRetryClickListener && null != noNetworkRetryView) {
noNetworkRetryView.setOnClickListener(mOnRetryClickListener);
}
mOtherIds.add(mNoNetworkView.getId());
addView(mNoNetworkView, 0, lay
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
csbysj2020
- 粉丝: 3203
- 资源: 6141
最新资源
- 胖东来:关于“红色内裤掉色、过敏以及部门处理过程”的调查报告
- Python 实现DBN深度置信网络多输入分类预测的详细项目实例(含完整的程序,GUI设计和代码详解)
- Python 实现基于CNN-GRU-KDE卷积门控循环单元多变量时间序列区间预测的详细项目实例(含完整的程序,GUI设计和代码详解)
- Python 实现CNN-BiGRU卷积双向门控循环单元多输入单输出回归预测的详细项目实例(含完整的程序,GUI设计和代码详解)
- Python 实现PSO-CNN粒子群算法优化卷积神经网络的数据多输入单输出回归预测的详细项目实例(含完整的程序,GUI设计和代码详解)
- Python 实现PSO-DBN粒子群优化深度置信网络多输入分类预测的详细项目实例(含完整的程序,GUI设计和代码详解)
- Python 实现基于CNN-GRU-Multihead-Attention-KDE多变量时间序列区间预测的详细项目实例(含完整的程序,GUI设计和代码详解)
- Python 实现GA-GRU遗传算法优化门控循环单元的数据多输入分类预测的详细项目实例(含完整的程序,GUI设计和代码详解)
- Python 实现INFO-ELM向量加权算法优化极限学习机时间序列预测的详细项目实例(含完整的程序,GUI设计和代码详解)
- Python 实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入分类预测(含完整的程序,GUI设计和代码详解)
- “基于DSP F2812技术的多功能光伏并网逆变器设计,包括DC AC逆变、控制及显示功能”,基于DSP F2812的2KW光伏并网逆变器设计与实现:逆变、控制、保护及监控一体化方案,2KW光伏并网逆
- 联想BIOS配置工具(ThinkBIOS Config)
- Python 实现NARX非线性自回归外生模型时间序列预测(含完整的程序,GUI设计和代码详解)
- 西门子828D CNC机床的UG后处理技术解析:工厂实战应用与自用经验分享,深入探讨UG后处理技术:CNC与西门子828D后处理的实践应用与工厂实战自用策略,UG后处理-CNC-西门子828D后处理
- Python 实现GA-BiLSTM遗传算法优化双向长短期记忆网络的数据多输入分类预测(含完整的程序,GUI设计和代码详解)
- Python 实现基于CNN-BiLSTM-KDE多变量时间序列区间预测(含完整的程序,GUI设计和代码详解)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)