封裝初始化綁定方法:
public static final void bindViews(Object object, View footView) { if(object == null) { return; } //獲取對象中所有屬性-不包含父類私有成員 Field[] fields = getFields(object); for(Field fi : fields) { //判斷屬性是否繼承自view if(View.class.isAssignableFrom(fi.getType())) { //根據屬性名獲取id int id = footView.getResources().getIdentifier(fi.getName(), "id", footView.getContext().getPackageName()); if(id > 0) { try { //查找到id時綁定控件到對應屬性上 fi.set(object, footView.findViewById(id)); } catch(IllegalAccessException e) { e.printStackTrace(); } } } } } public static Field[] getFields(Object o) { Field[] f1 = o.getClass().getDeclaredFields(); // 設置不檢查訪問 for(int i = 0; i < f1.length; i++) { f1[i].setAccessible(true); } return f1; }
在類中的使用方法:
1、聲明一個與xml控件id相同的View字段,例如title;
2、在類中調用封裝方法bindViews,
a、第一個參數爲了通過反射獲取、賦值聲明的View字段;
b、第二個參數爲目標View所在的父級View對象(可以設置成根佈局:getWindow().getDecorView());
注意:聲明的字段名必須與xml中定義的view id名稱一致,否則對象爲空,需要自行通過註解或者findViewById自行賦值;
TextView title; public void init(Activity ctx){ bindViews(this, ctx.findViewById(R.id.root)); title.setText("自動半丁"); }