Android自定义切换布局(请求中,无网络,无数据等)
来源:互联网 发布:腾讯大王卡扫号软件 编辑:程序博客网 时间:2024/04/27 20:50
在一般的项目中,像请求中、无数据、无网络、请求超时等这些状态的布局我们需要经常切换。
在之前的项目中,我是在每个需要显示这些布局的xml文件中都include请求中,无数据,无网络等这些布局,然后再Activity中控制他们的显示与隐藏,虽然能实现效果,但是控制起来很麻烦,重复的代码也很多。如下图:
1.声明变量:
2.获取资源ID
3.初始化showView
4.控制显示与隐藏
5.showView代码
可以看到,很麻烦。所以,就有了写一个专门用来管理这些状态布局的类的想法。方便以后的开发。
下面我们来实现它,直接看代码,注释很详细:
1.shouView类:
package com.yzq.testshowview;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;/** * Created by yzq on 2016/10/18. * 控制布局的切换 */public class ShowView extends LinearLayout implements View.OnClickListener { private View view; private LinearLayout loaddingLayout;//加载中布局 private LinearLayout abnormalLayout;//异常布局 (无数据,无网络,请求超时) private ImageView hintImg;//提示图片 private TextView hintTv;//提示文字 private Button refreshBtn;//刷新按钮 public static final int LOADDING = 0;//加载中 public static final int NO_DATA = 1;//无数据 public static final int NO_NET = 2;//无网络 public static final int TIME_OUT = 3;//超时 private RetryListerner retryListener;//重试 public ShowView(Context context) { super(context); initView(context); } public ShowView(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } public ShowView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(context); } private void initView(Context context) { Log.i("初始化view", "initView"); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.show_view_layout, this); loaddingLayout = (LinearLayout) view.findViewById(R.id.loaddingLayout); abnormalLayout = (LinearLayout) view.findViewById(R.id.abnormalLayout); hintImg = (ImageView) view.findViewById(R.id.hintImg); hintTv = (TextView) view.findViewById(R.id.hintTv); refreshBtn = (Button) view.findViewById(R.id.refreshBtn); refreshBtn.setOnClickListener(this); show(LOADDING);//显示加载中 } @Override public void onClick(View v) { show(LOADDING);//显示加载中 retryListener.retry();//执行重试逻辑 } /*设置重试监听*/ public void setOnRetryListener(RetryListerner retryListener) { this.retryListener = retryListener; } public void show(int i) { view.setVisibility(VISIBLE); switch (i) { case LOADDING: /*加载中*/ loaddingLayout.setVisibility(VISIBLE); abnormalLayout.setVisibility(GONE); break; case NO_DATA: /*暂无数据*/ loaddingLayout.setVisibility(GONE); abnormalLayout.setVisibility(VISIBLE); hintImg.setImageResource(R.drawable.no_data); hintTv.setText(R.string.noData); break; case NO_NET: /*无网络*/ loaddingLayout.setVisibility(GONE); abnormalLayout.setVisibility(VISIBLE); hintImg.setImageResource(R.drawable.no_net); hintTv.setText(R.string.noNet); break; case TIME_OUT: /*超时*/ loaddingLayout.setVisibility(GONE); abnormalLayout.setVisibility(VISIBLE); hintImg.setImageResource(R.drawable.no_data); hintTv.setText(R.string.timeOut); break; } } public interface RetryListerner { void retry(); }}
2.在MainActivity中使用:
package com.yzq.testshowview;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.util.Log;public class MainActivity extends AppCompatActivity implements ShowView.RetryListerner { private ShowView showView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); showView.setOnRetryListener(this);//设置监听 /*模拟无数据*/ new Handler().postDelayed(new Runnable() { @Override public void run() { showView.show(ShowView.NO_DATA); } }, 1000 * 3); } private void initView() { showView = (ShowView) findViewById(R.id.showView); } @Override public void retry() { Log.i("重试", "刷新"); /*模拟无网络*/ new Handler().postDelayed(new Runnable() { @Override public void run() { showView.show(ShowView.NO_NET); } }, 1000 * 3); }}
这样就方便多了。下面是demo,需要的可以下载看下效果:
demo
2 0
- Android自定义切换布局(请求中,无网络,无数据等)
- Android自定义view实现加载中、加载失败、无数据
- Android 浏览器直接请求链接有返回数据,但在程序中请求无返回。
- Android 加载成功、加载失败、加载中、无数据四个不同界面的切换
- Android开篇之listview加载中、无数据、等各种状态
- android 判断网络状态 (无网络 wifi 数据流量)
- Android-->打造流行的无数据空布局页面
- 每个App都会用到的LoadingLayout(加载中、正在加载、无网络连接等......)
- 每个App都会用到的LoadingLayout(加载中、正在加载、无网络连接等......)
- HighCharts自定义"无数据样式"
- 无网络连接数据问题
- android之listview无数据时显示自定义view
- iOS开发中,对于列表无数据、无网络展示的友好提示
- android模拟器中播放视频(有声无影等问题的解决)
- android 全屏 (无状态栏 Navigation bar) 切换
- android webview 缓存无网络
- ajax异步无刷新请求数据
- 如何统一处理tableView无数据,网络请求失败的占位图
- 光流法
- Unity&Shader基础篇-Cg语法
- View工作原理(一)事件传递原理详解
- 用pdf压缩器压缩文件的操作步骤
- js 编写神经网络
- Android自定义切换布局(请求中,无网络,无数据等)
- 解决:VS2013+ QT5.6.2 , Addin插件无法安装
- C++的const类成员函数
- 2016/10/18 全栈高手成长日记
- clojure
- MAC 下画 UML 工具
- extjs 页面显示上传文件名,并点击下载
- 【C语言】编译链接的整个过程和详细的每个过程
- DRM