關注註解 我想都不陌生了,android上採用註解來快速開發 我在實際工作中還沒試過,這裡簡介記錄一下我對android註解框架的理解。
註解在android開發中大致可以分為用在 方法 、成員、和 事件上,其他暫時不考慮。
引用註解,反射得到註解的值,
傳遞進入當前context反射得到method。field 等,然後執行invoke 方法即可
這樣可以通過註解反射成員變數(可以初始化控制項),成員方法(載入布局檔案)等。比較簡單。
btn = findviewbyid:可能需要多個btn,因此寫註解是多個的。@inject(value=id)
class<? extends activity> clazz = activity.getclass();
field fields = clazz.getdeclaredfields();
// 遍歷所有成員變數
for (field field : fields)
setoncontentview(id) :由於乙個類只有個layout布局設定,所以只需要乙個annotation就行了.(@contentview(value=id))
class<? extends activity> clazz = activity.getclass();
contentview contentview = clazz.getannotation(contentview.class);
以上是註解反射欄位和 反射方法。
下面這樣的**
btn.setonclicklistener(new view.onclicklistener())
將改為:
@onclick(value=r.id.btn1,value=r.id.btn2...)
public void myclick(view v)
1、反射得到btn
利用註解拿到id後 findviewbyid(id),得到button
2、利用proxy invocationhandler 建立介面(view.onclicklistener)的物件,可以自定義乙個類實現invocationhandler 。
例如下面**:
main:test:
invocationhandler i = new invocationhandler()
};//利用proxy建立出介面inte***cetest的物件,
object o = proxy.newproxyinstance(person.class.getclassloader(), new class, i);
//轉化為inte***cetest物件
inte***cetest inte***cetest = (inte***cetest) o;
//當呼叫物件的方法時,也就是介面中的方法時就會呼叫invocationhandler的invoke方法。上面的i就是**物件。
string result1 = inte***cetest.printinfo1();
inte***cetest.printinfo2();
string result = inte***cetest.printinfo3("1");
system.out.println(result);
public inte***ce inte***cetest
3、反射執行setonclicklistener
總體思想是把下面這句**,封裝起來,只把控制項id和自己定義的事件處理方法 提供給程式設計師來寫。
btn.setonclicklistener(new view.onclicklistener())
@onclick(value=r.id.btn1,value=r.id.btn2...)
public void myclick(view v)
那麼可以推測到有個註解 @inte***ce onclick。這個@inte***ce onclick註解裡面得完成btn.setonclicklistener(new view.onclicklistener()) 操作。而@inte***ce onclick是個註解。
所以只有在這個註解上再次使用乙個註解。於是乎有:
@target(elementtype.method)
@retention(retentionpolicy.runtime)
@eventbase(listenertype = view.onclicklistener.class, listenersetter = "setonclicklistener", methodname = "onclick")
public @inte***ce onclick
那麼在 @inte***ce eventbase中來提供 設定listener的元素:監聽類的型別(onclicklistener.class),型別名稱(setonclicklistener),監聽類的方法也就是事件的處理方法
(onclick),有了這三個元素就可以 在驗證@inte***ce eventbase註解時 完成btn.setonclicklistener(obj)操作.
下面是實現的**:
/**
* 注入所有的onclick事件
* * @param activity
*/private static void injectevents(activity activity)
, handler);
//到此即可設定事件了:
for (int viewid : viewids)
} catch (exception e)}}
} }
方便快速開發的 註解框架基本原理 我理解就是這個了,下面是如何使用的問題,比較簡單。
@contentview(value = r.layout.activity_main) //在類上加上註解 ,用來設定布局檔案
public class mainactivity extends activity implements onclicklistener }
public static void inject(activity activity)
CSS 原理理解
網頁製作最初,html規定了 normal document stream 標準文件流 來規範元素在網頁中的顯示法則 標準文件流中元素分兩種 塊內元素,行內元素。行內元素的特點 span標籤 豎直margin中的塌陷現象,上下緊密排列的元素的外邊距並不是兩個元素外邊距之和,而是選取那個最大的外邊距作...
Spring IOC原理理解
ioc,inversion of control,控制倒轉。這是spring的核心,貫穿始終。所謂ioc,對於spring框架來說,就是由spring來負責控制物件的生命週期和物件間的關係。di,dependency injection,依賴注入。在系統執行中,動態的向某個物件提供它所需要的其他物件...
ROI Align 原理理解
對背景問題的理解 之前一直在想乙個問題 乙個label在原圖上標記出乙個包含目標的區域。這個框在特徵提取後,大小被縮小到了什麼程度?如果這個label框本身就不大,那麼經過幾層池化之後,是不是在最後的feature map上都沒有乙個位置,能夠對應到這個區域?目標在特徵提取過程中,由於這種深度結構導...