2021-10-13 公共模块实现页面不同状态不同视图的显式

学习lib_common 公共业务模块中知识

刚刚学习了使用自定义的可复用的组件,就是自己定义一个view,在其他地方直接使用;实现的是ToolBar。

这里学习,在任何一个页面都会使用的是 多状态view,也就是说可能此时在加载就会出现loadingView,出错就会出现errorView,这是每一个页面都可能会出现的问题,所以也写在公共业务模块中。

这里实现和之前实现公共复用的导航栏还不一样,那个是在不同地方可能要显示 的导航是不一样的,所以要创建atrr自定义控件,并将属性付给xml布局中的控件资源,在使用时自己设置App:属性;但是这里是在不同状态下直接展示出不同的画面,搜易只要定义一个MultipleStatusView文件,使用attr中自定义状态布局,在view文件中加载自定义控件,根据不同的页面的状态显示不同的页面布局。

onFinishInflate()方法
在整个布局文件都实例化结束后每个view才进行回调,也就是在控件以及子控件都实例化结束后每个view才进行回调。
那为什么,要在所有的控件都实例化之后在进行调用呢?
onDetachedFromWindow()
是在onDestory 之后调用的,也就是视图从窗口上分离的时候进行调用,这时候视图已经不具有可绘制的部分。
就是说这个activity在进行销毁的时候调用,此时在这个方法中就可以进行清除缓存、取消广播注册,取消监听器等动作。

显示空视图、加载视图等

 在这个view文件中,从外部可以调用showempty等方法,showempty中又会调用私有的方法,只不过两个的调用的参数是不一样的,
 在NormalBind这个全局使用的 进行全局监听,将MultipleStatusView、PageStateType作为参数传进来,  
 MultipleStatusView负责是不同的界面展示不同视图,
 PAgeStateType 是一个接口, 枚举类 定义常见的页面状态。
 如果页面状态是empty,则进行调用MultipleStatusView中的showEmpty的方法,展示empty页面。

所以下面我们看一下pageStateType这个接口,页面状态标识类 是包含页面状态的枚举类,

【【 使用枚举类的时候,如果使用的是enum,因为每一个枚举值都是一个对象没所以使用枚举会大大的增加dex文件的大小,这样就使得app运行增加很大的开销,所以为了解决问题就有一种新的方式来定义枚举,因为知道基本数据类型是很少占空间。 使用**@IntDef/@StringDef + @interface**进行解决,

@IntDef({
    
    ADD,SUB,MUL,DIV})
@Retention(RetentionPolicy.SOURCE)
public @interface Operation{
    
    
    private static final int ADD = 0;
    private static final int SUB = 1;
    private static final int MUL = 2;
    private static final int DIV = 3;
}

@Retention(RetentionPolicy.SOURCE) 这个注解是表明@InfDef的保留策略,这个保留策略是: 只保留源码中,编译时删除,

1、SOURCE:在原文件中有效,被编译器丢弃。
2、CLASS:在class文件有效,可能会被虚拟机忽略。
3、RUNTIME:在运行时有效。

使用的时候就是:

public void operation(@Operation int opeartion) {
    
    
    switch (opeartion) {
    
    
      case ADD:
        break;
      case SUB:
        break;
      case DIV:
        break;
      case MUL:
        break;
    }
  }

】】

所以进行总结就是 页面在加载时可能出现 正在加载、加载失败、网页丢失等错误,我们将这些可能出现的进行封装,声明一个枚举类,其中定义会出现的所有的错误的状态, 不同的错误状态展示不同的视图,所以也要定义一个MultipleStatusView类,这个类中有showLoading等方法,用于展示不同的视图,方法供外部进行调用。NormalBind这个全局使用的 进行全局监听,将MultipleStatusView、PageStateType作为参数传进来,监听页面的状态,不同状态调用MultipleStatusView中不同的方法,进行不同的页面视图的展示。

猜你喜欢

转载自blog.csdn.net/qq_45204129/article/details/120746405
今日推荐