Android(安卓)使用ViewStub 实现多状态页面切换基类
16lz
2022-04-08
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();}
源代码下载
可根据自己需求进行扩展。
更多相关文章
- Android中使用XStream解析XML
- Android驱动使用JNI调用
- android中使用定时任务
- Android(安卓)Screen Monitor使用
- android 设置特殊字体
- Android菜鸟的成长笔记——Android(安卓)Studio使用小结
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用