編輯:關於Android編程
Field field;
/**
* 利用反射確定是否關閉對話框
*
* @param dialog
* @param close
* false:不關閉;true:關閉
*/
public void closeDialog(final DialogInterface dialog, boolean close) {
// 利用反射使點擊按鈕時,對話框不會關閉
try {
// 得到AlertDialog的父類屬性mShowing
field = dialog.getClass().getSuperclass()
.getDeclaredField("mShowing");
field.setAccessible(true);
// 將mShowing變量設為false,表示對話框已關閉
field.set(dialog, close);
dialog.dismiss();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
二、反射相關:
a. 通過反射得到cla類的屬性列表
/**
* 得到cla類的屬性列表
*
* @param cla
* 要反射的類
* @return
*/
@SuppressWarnings("rawtypes")
public List getPropertyNames(Class cla) {
List list = new ArrayList();
Field[] fs = cla.getDeclaredFields();
// fs=cla.getFields();加了這個的話就只獲得public 公有的
for (Field f : fs) {
list.add(f.getName());
}
return list;
}
b. 通過反射得到與屬性列表相對應的屬性值列表/**
* 得到與屬性列表相對應的屬性值列表
*
* @param shuxingList
* 屬性列表
* @param obj
* 實體類
* @return 與屬性對應的屬性值列表
* @throws NoSuchFieldException
* @throws SecurityException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public List getValueList(List shuxingList, Object obj) {
List valueList = null;
try {
Class cla = obj.getClass();
valueList = new ArrayList();
for (int i = 0; i < shuxingList.size(); i++) {
Field f = cla.getDeclaredField(shuxingList.get(i).toString());
f.setAccessible(true);// 加了這句才能改私有的值
// 得到屬性值
Object str = f.get(obj);
valueList.add(str);
}
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return valueList;
}
c. 通過反射將obj類的屬性列表一個個賦值
/**
* 將obj類的屬性列表一個個賦值
*
* @param obj
* 要反射的類
* @param propertyNames
* 類的屬性列表
* @param propertyVales
* 與屬性相對應的屬性值列表
* @throws SecurityException
* @throws NoSuchFieldException
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
@SuppressWarnings("rawtypes")
public void method(Object obj, List propertyNames,
List propertyVales) {
try {
Class cla = obj.getClass();
for (int i = 0, len = propertyNames.size(); i < len; i++) {
// Log.i("propertyNames"+i, propertyNames.get(i)+"");
Field f = cla.getDeclaredField(propertyNames.get(i).toString());
f.setAccessible(true);// 加了這句才能改私有的值
f.set(obj, propertyVales.get(i));
}
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} d. 通過反射得到字段名稱
public String[] GetFiled(Object object) {
Class extends Object> cla = object.getClass();
Field[] fs = cla.getDeclaredFields();
String[] fields = new String[fs.length];
for (int i = 0; i < fs.length; i++) {
// Log.i("propertyNames"+i, propertyNames.get(i)+"");
fields[i] = fs[i].getName();
}
return fields;
} e. 通過反射給obj類的單個屬性賦值
/**
* 給obj類的單個屬性賦值
*
* @param obj
* 要反射的類
* @param shuXing
* 要賦值的屬性
* @param value
* 要給屬性賦予的值
* @throws SecurityException
* @throws NoSuchFieldException
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
public void method(Object obj, String shuXing, Object value)
throws SecurityException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException {
@SuppressWarnings("rawtypes")
Class cla = obj.getClass();
Field f = cla.getDeclaredField(shuXing);
// 加了這句才能改私有的值
f.setAccessible(true);
// 為屬性賦值
f.set(obj, value);
}
f. 通過反射對類進行解析並賦值
/**
* 對類解析並賦值
*
* @param documentElement
* @param object
* @return
* @throws NoSuchFieldException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws ClassNotFoundException
*/
public Object useFanSheToData(SoapObject documentElement, Object object,String entityname)
throws NoSuchFieldException, IllegalAccessException,
InstantiationException, ClassNotFoundException {
// 利用反射給類賦值
FanShe fanShe = new FanShe();
// 存放類的屬性
List classFileList = new ArrayList();
// 存放類的屬性值
List
android實現簡單的畫畫板實例代碼
直接看代碼,注釋都寫清楚了復制代碼 代碼如下:public class MainActivity extends Activity { private Imag
Android性能優化系列——Understanding Overdraw
過度繪制(Overdraw)是指在一幀的時間內像素被繪制了多次;理論上一個像素每次只繪制一次是最優的,但是由於層疊的布局導致一些像素會被多次繪制,而每次繪制都會對應到CP
Android wpa_supplcant 啟動之--網絡接口初始化
wpa_supplicant結構體與網絡接口 在手機adb中運行 netcfg或者ifconfig可以看到相關的網絡接口的ip,掩碼,mac地址等信息 Wpa_
Android:自定義PopupMenu的樣式(顯示圖標/設置RadioButton圖標)
PopupMenu是Android中一個十分輕量級的組件。與PopupWindow相比,PopupMenu的可自定義的能力較小,但使用更加方便。 先上效果圖: 本