用枚举构造完成资源绑定

来源:互联网 发布:札幌住宿 知乎 编辑:程序博客网 时间:2024/06/05 08:56

转载请标注:
披萨大叔的博客 http://blog.csdn.net/qq_27258799/article/details/51512715
如果您觉得这篇文章对您有帮助,请点下文章最下面的赞~

如下图,我们如果想要实现这样一个布局,ListView每个item有两个ImageView和两个TextView,初始化的时候,这些图标资源和文字都要赋值,也就是说,这些资源都是需要我们可以配置的,如果把这些个资源绑定到一起?用一堆数组?用XML?

这里写图片描述

到目前为止,最好的方式我认为还是枚举构造:

public enum ListViewItem{    /**     * 待处理工单     */    FORHANDLED(R.drawable.group1, R.color.red, R.string.workorder_forHandled, 0, false),    /**     * 处理中工单     */    HANDLING(R.drawable.group2, R.color.brown, R.string.workorder_handling, 0, false),    /**     * 已完成工单     */    COMLETE(R.drawable.group3, R.color.darkgray, R.string.workorder_complete, 0, false);    private int iconResId;    private int titleResId;    private int initialCount;    private boolean hasNew;    private int colorResId;    /**     * @param iconResId     *            图标资源ID     * @param colorResId     *            subName文字颜色     * @param titleResId     *            标题资源ID     * @param initialCount     *            已经获得的工单数量     * @param hasNew     *            是否有新工单     */    private WorkOrderGroupEnum(int iconResId, int colorResId, int titleResId, int initialCount, boolean hasNew) {        this.iconResId = iconResId;        this.titleResId = titleResId;        this.initialCount = initialCount;        this.colorResId = colorResId;        this.hasNew = hasNew;    } //……Getters方法……}

如上面代码,我们把各种资源已经可能用到的参数,都作为枚举构造的参数,这样我们在用的时候直接这样:

ListViewItem[] items = ListViewItem.values();

如此,便完成了初始化工作,得到了资源对象。

根据枚举类的特性,枚举类的构造函数只能是private的,只在枚举类初始化的时候调用,所以保证了枚举类的“单例”特性,枚举类的实例默认就是线程安全的,并且可以被自由序列化,所以这也是枚举单例最被推崇的原因。

综上所述,为什么不用枚举类完成资源绑定呢?

1 0