丈夫欲遂平生志,一载寒窗一举汤。这篇文章主要讲述Android 自定义通用的loadingview相关的知识,希望能为你提供帮助。
介绍 好久没有写博客啦,
接近新年了,
年前的工作都要收尾,
所以特别忙,
周末抽空写了个通用的加载view,写篇博客分享出来。
功能先放一张效果图压压惊
1、显示加载视图, 加载失败的时候显示加载失败视图, 数据为空时显示数据为空视图, 支持为失败视图设置点击事件重新加载数据。
2、支持个性化设置, 自定义设置 加载、失败、空数据视图。
文章图片
实现 实现思路其实就是一个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);
}
}
至于具体的布局和样式文件就不贴了, 主要是实现思路, 代码
下载请参考源码下载 , 记得点赞哟!
如果我的文章对你有帮助, 随意打赏支持下, 谢谢
文章图片
推荐阅读
- 开发工具 - AndroidStudio之AndroidStudio使用笔记
- Android设置横屏竖屏
- Android使用Gradle统一配置依赖版本
- Android第六天
- Android-Universal-Image-Loader 学习笔记线程池分析
- 安卓笔记20170118
- Android流行界面结构——Fragment通过ViewPager(带指示器)嵌套Fragment结构的创建方法详解
- Android群英传笔记——第五章(Android Scroll分析)
- Android学习——Fragment与Activity通信