1、ViewStub 的基本使用:

(1):布局文件

android:layout: 为引用的布局文件。 

(2):代码调用显示该ViewStub

try {    //如果没有被inflate过,使用inflate膨胀    View inflated = mVSLoading.inflate();    AutoUtils.auto(inflated);} catch (Exception e) {    //如果使用inflate膨胀报错,使用setVisibility方法显示    mVSLoading.setVisibility(View.VISIBLE);}

2、状态动态切换activity 的基类的实现:

 

public abstract class BaseActivity extends AppCompatActivity {    private ViewStub mVSLoading;    private ViewStub mVSFailedToLoad;    private ViewStub mVSNetworkError;    private ViewStub mVSEmptyData;    private ViewStub mVSNormalData;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        super.setContentView(R.layout.activity_base);        initView();    }    private void initView() {        mVSLoading = findViewById(R.id.vs_loading);        mVSFailedToLoad = findViewById(R.id.vs_failed_to_load);        mVSNetworkError = findViewById(R.id.vs_network_error);        mVSEmptyData = findViewById(R.id.vs_empty_data);        mVSNormalData = findViewById(R.id.vs_normal_data);    }    @Override    public void setContentView(int id) {        mVSNormalData.setLayoutResource(id);    }    protected void setVSLoading() {        initVisibility();        try {            //如果没有被inflate过,使用inflate膨胀            View inflated = mVSLoading.inflate();        } catch (Exception e) {            //如果使用inflate膨胀报错,就说明已经被膨胀过了,使用setVisibility方法显示            mVSLoading.setVisibility(View.VISIBLE);        }    }    public void setVSFailedToLoad() {        initVisibility();        try {            //如果没有被inflate过,使用inflate膨胀            View inflated = mVSFailedToLoad.inflate();            TextView textView = inflated.findViewById(R.id.textView);            textView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    setOnClickRefresh();                }            });        } catch (Exception e) {            //如果使用inflate膨胀报错,就说明已经被膨胀过了,使用setVisibility方法显示            mVSFailedToLoad.setVisibility(View.VISIBLE);        }    }    public void setVSNetworkError() {        initVisibility();        try {            //如果没有被inflate过,使用inflate膨胀            View inflated = mVSNetworkError.inflate();        } catch (Exception e) {            //如果使用inflate膨胀报错,就说明已经被膨胀过了,使用setVisibility方法显示            mVSNetworkError.setVisibility(View.VISIBLE);        }    }    public void setVSEmptyData() {        initVisibility();        try {            //如果没有被inflate过,使用inflate膨胀            mVSEmptyData.inflate();        } catch (Exception e) {            //如果使用inflate膨胀报错,就说明已经被膨胀过了,使用setVisibility方法显示            mVSEmptyData.setVisibility(View.VISIBLE);        }    }    public void setVSNormalData() {        initVisibility();        try {            //如果没有被inflate过,使用inflate膨胀            mVSNormalData.inflate();        } catch (Exception e) {            //如果使用inflate膨胀报错,就说明已经被膨胀过了,使用setVisibility方法显示            mVSNormalData.setVisibility(View.VISIBLE);        }    }    public void initVisibility() {        mVSLoading.setVisibility(View.GONE);        mVSFailedToLoad.setVisibility(View.GONE);        mVSEmptyData.setVisibility(View.GONE);        mVSNetworkError.setVisibility(View.GONE);        mVSNormalData.setVisibility(View.GONE);    }    protected abstract void setOnClickRefresh();}

 源代码下载

可根据自己需求进行扩展。

更多相关文章

  1. Android中使用XStream解析XML
  2. Android驱动使用JNI调用
  3. android中使用定时任务
  4. Android(安卓)Screen Monitor使用
  5. android 设置特殊字体
  6. Android菜鸟的成长笔记——Android(安卓)Studio使用小结
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. Android电源管理
  2. 用Android模拟器体验angry birds
  3. 64位 ubuntu android SDK 无法新建AVD,adb
  4. iOS从业者的Android初体验
  5. Android(安卓)- 主要的UI元素。
  6. 利用 RDP Wrapper 实现 Android(安卓)平
  7. Android随笔之——Android时间、日期相关
  8. Android获取外置SD卡读写路径
  9. Android(安卓)adb 我的常用调试命令记录(
  10. Android系统源码目录解析