android 自動初始化控件

封裝初始化綁定方法:

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("自動半丁");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章