estoy usando AspectJ con Android y estoy capturar correctamente las llamadas a View.setOnClickListener()
con este aspecto:Captura View.setOnClickListener() define a través de 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());
}
}
Por desgracia, este no captura oyentes establecieron con en el diseño XML. ¿Hay alguna forma de capturar esto?
No me molesta comprobar todas las vistas programáticamente, pero ¿cómo verificaría a los oyentes? No hay 'getOnClickListener()' (pero hay un 'getOnFocusChangeListener()' ...: P) – m0skit0
Oh wow. Me pregunto por qué es así. Mi mal, pensé que había uno. Lo siento, no puedo ayudarte. No estoy familiarizado con aspectj, solo puedo decir que el onclicklistener se establece directamente al analizar el xml en el constructor de la vista (al inflar un diseño). Sin embargo, podría analizar el xml usted mismo, entonces al menos obtendría el nombre del método que se llama, pero no el objeto detector. Y probablemente sea mucho trabajo. –
Sí, pensé en analizar el XML. Gracias por su respuesta :) – m0skit0