編輯:關於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 Listb. 通過反射得到與屬性列表相對應的屬性值列表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; }
/** * 得到與屬性列表相對應的屬性值列表 * * @param shuxingList * 屬性列表 * @param obj * 實體類 * @return 與屬性對應的屬性值列表 * @throws NoSuchFieldException * @throws SecurityException * @throws IllegalAccessException * @throws IllegalArgumentException */ @SuppressWarnings({ "rawtypes", "unchecked" }) public List getValueList(Listc. 通過反射將obj類的屬性列表一個個賦值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; }
/** * 將obj類的屬性列表一個個賦值 * * @param obj * 要反射的類 * @param propertyNames * 類的屬性列表 * @param propertyVales * 與屬性相對應的屬性值列表 * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalArgumentException * @throws IllegalAccessException */ @SuppressWarnings("rawtypes") public void method(Object obj, Listd. 通過反射得到字段名稱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(); } }
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(); // 存放類的屬性 ListclassFileList = new ArrayList (); // 存放類的屬性值 List
直接看代碼,注釋都寫清楚了復制代碼 代碼如下:public class MainActivity extends Activity { private Imag
過度繪制(Overdraw)是指在一幀的時間內像素被繪制了多次;理論上一個像素每次只繪制一次是最優的,但是由於層疊的布局導致一些像素會被多次繪制,而每次繪制都會對應到CP
wpa_supplicant結構體與網絡接口 在手機adb中運行 netcfg或者ifconfig可以看到相關的網絡接口的ip,掩碼,mac地址等信息 Wpa_
PopupMenu是Android中一個十分輕量級的組件。與PopupWindow相比,PopupMenu的可自定義的能力較小,但使用更加方便。 先上效果圖: 本