美文网首页安卓开发程序员
巧用枚举来处理UI中显示值与业务值不同的场景

巧用枚举来处理UI中显示值与业务值不同的场景

作者: since1986 | 来源:发表于2017-03-22 14:58 被阅读0次

在Android中,经常会遇到一些在UI上显示的值与实际业务需要的值不一致的场景,这时就是枚举发挥用武之地的时候了

看下图所示的这个场景:
</br>


场景

这个场景是一个类似于web中<select>的场景(图中这个下拉组件是我自己写的一个自定义View,用于替换SDK内置的Spinner),从这个场景中不难看出,我们在UI中需要显示的值和业务逻辑中需要的值是不一样的(后端给的接口定义了一组数字来作为参数),我们不能直接把UI中的“正面”这两个字作为参数传给业务逻辑的方法,而应传递一个对应于“正面”的值,该如何实现这个场景呢,这时候枚举就该登场了,看代码,用心去感受~

//代码片段1
public enum Relativity {

    //直接使用中文来给枚举命名,从而利用继承自父类的 .toString() 来返回UI需要的值
    全部 {
        @Override
        public String value() {
            return "";
        }

    }, 正面 {
        @Override
        public String value() {
            return "1";
        }

    }, 中性 {
        @Override
        public String value() {
            return "0";
        }

    }, 负面 {
        @Override
        public String value() {
            return "-1";
        }

    };

    public abstract String value(); //定义一个抽象方法让子类来实现,这个方法的返回值是业务逻辑中需要用到的值
}
//代码片段2 (这个 bindData 是我自定义View里的绑定数据的方法,实际上里面是调用了ArrayAdapter的addAll(T... items))
spinnerRelativity.bindData(Relativity.values()); //直接使用枚举的 .values() 返回所有此类枚举所组成的数组作为参数传给UI
//代码片段3 
spinnerRelativity.setOnValueChangeListener(new OnValueChangeListener() {

    @Override
    public void onValueChange(View view, CharSequence originalValue, CharSequence newValue) {
        relativity = Relativity.valueOf((String) newValue) //onValueChange 是我自定义View里的一个回调方法,如图所示,当用户选中“全部”时方法的第二个参数“newValue”的值就是一个字符串 "全部", 这时,利用枚举的 valueOf(String s) 方法就可以从这个字符串得到对应的枚举对象
                .value(); //得到枚举对象后再调用枚举中自定义的 .value() 获得业务逻辑所需要的值
        
                //此处是你的业务逻辑
    }
});

相关文章

  • 巧用枚举来处理UI中显示值与业务值不同的场景

    在Android中,经常会遇到一些在UI上显示的值与实际业务需要的值不一致的场景,这时就是枚举发挥用武之地的时候了...

  • 自定义Mybatis枚举类处理器

    前言 在实现业务代码时,根据业务场景会抽象出类似于状态、阶段等枚举类。依据枚举值表示特定阶段,定义枚举值时,一般会...

  • 枚举(二)

    原始值 与C中的枚举值不同,Swift枚举值不以整数作为默认值。这意味着1月份january本身就是值。 但是你可...

  • iOS快速适配Dark模式

    根据颜色使用场景不同,定义不同的枚举值,然后区分dark模式还是light模式,返回不同的颜色值

  • Swift与OC的语法简单对比(常用语法二)

    20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...

  • Swift 5 枚举

    枚举 关联值: 枚举的成员值和其他类型的值关联储存,存储在枚举变量中 原始值: 枚举成员使用相同的默认值预先对应,...

  • Swift 5.x enum关联值

    可以定义Swift枚举来存储任意给定类型的关联值, 如果需要的话不同枚举成员关联值的类型可以不同 e.g. 输出结...

  • 不使用Activity如何添加一个View

    整体方案 在Service中通过WindowManger添加View的方式来把UI界面显示出来 业务场景 具体场景...

  • 枚举

    枚举 本节内容包括: 枚举语法 匹配枚举值与switch语句 相关值 原始值 枚举语法 注意:不像 C 和 Obj...

  • 在Swagger中显示枚举值

    一、实现代码 1.1 自定义注解 1.2 Swagger配置拦截自定义注解 1.3 枚举类 重点:重写toStri...

网友评论

    本文标题:巧用枚举来处理UI中显示值与业务值不同的场景

    本文链接:https://www.haomeiwen.com/subject/fwronttx.html