转载请标注:
披萨大叔的博客 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的,只在枚举类初始化的时候调用,所以保证了枚举类的“单例”特性,枚举类的实例默认就是线程安全的,并且可以被自由序列化,所以这也是枚举单例最被推崇的原因。
综上所述,为什么不用枚举类完成资源绑定呢?