我使用的AspectJ與Android定義,我成功地捕捉調用View.setOnClickListener()
此方面:捕捉View.setOnClickListener()通過XML
public aspect Test {
pointcut callPointcut(View view, OnClickListener listener) : call(void View.setOnClickListener(OnClickListener)) && target(view) && args(listener);
@SuppressAjWarnings // Exported advice
before(View view, OnClickListener listener) : callPointcut(view, listener)
{
Log.d("AspectJ", "Attempt to set onClick listener on view " + Integer.toHexString(view.getId()));
Log.d("AspectJ", "Aspect has executed.");
Log.d("AspectJ", listener.toString());
}
}
不幸的是,這並沒有抓住聽衆建立與在佈局XML中。有什麼辦法可以捕捉到這個?
我不介意以編程方式檢查所有視圖,但我將如何檢查監聽器?沒有'getOnClickListener()'(但有一個'getOnFocusChangeListener()'...)P) – m0skit0
哦,哇。我不知道這是爲什麼。我不好,我以爲有一個。對不起,幫不了你。我對aspectj不熟悉,我只是可以告訴你,在視圖的構造函數中解析xml時(在擴展布局時),直接設置onclicklistener。但是,您可以自己分析xml,然後您將獲得所調用的方法名稱,但不會收聽偵聽器對象。它可能是很多工作。 –
是的,我想過解析XML。感謝您的回答:) – m0skit0