天天看点

用枚举构造完成资源绑定

转载请标注:

披萨大叔的博客 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, , false),
    /**
     * 处理中工单
     */
    HANDLING(R.drawable.group2, R.color.brown, R.string.workorder_handling, , false),
    /**
     * 已完成工单
     */
    COMLETE(R.drawable.group3, R.color.darkgray, R.string.workorder_complete, , 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的,只在枚举类初始化的时候调用,所以保证了枚举类的“单例”特性,枚举类的实例默认就是线程安全的,并且可以被自由序列化,所以这也是枚举单例最被推崇的原因。

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