Android не может получить доступ к методу setOnClickListener с помощью getMethod, getMethods, getDeclaredMethod - PullRequest
0 голосов
/ 21 марта 2012

У меня есть кнопка, и я могу получить любой из ее методов, таких как getText, setText ... используя

Method mth = myButton.getClass().getMethod("getText", parameterTypes);

но когда я пытаюсь получить метод "setOnClickListener", используя тот же код Method mth = myButton.getClass().getMethod("setOnClickListener", parameterTypes); Я получаю исключение: исключение "NoSuchMethodException".

Что я пробовал:

отправить пустые параметры

Class<?>[] parameterTypes = new Class[] {};
`Method mth = myButton.getClass().getMethod("setOnClickListener", parameterTypes);` NOT working the same Exception:  "NoSuchMethodException"

i tried to get all the methods and identify it by name.
Method[] arrMethods = objElem.getClass().getMethods();

Method listener = getMethodByName(arrMethods,"setOnClickListener");

public Method getMethodByName(Method[] arrMethods,String MethodName)
    {
        for(int i=0;i<arrMethods.length;i++)
        {
            if(arrMethods[i].getName() == MethodName)
            {
                return arrMethods[i];
            }
        }
        return null;
    }

функция на самом деле не найдена. ясно, что у меня есть некоторое недопонимание здесь. Может быть, это не возможно достичь этого метода? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 07 января 2016

Вы должны предоставить правильные типы параметров

Class<?>[] parameterTypes = new Class[] {View.OnClickListener.class};

Вы всегда можете просмотреть параметр в документации класса / метода View.setOnClickListener

0 голосов
/ 21 марта 2012

Я не уверен, что

if(arrMethods[i].getName() == MethodName)

действительно то, что вы хотите. Это условие будет истинным, если arrMethods [i] .getName () возвращает ссылку на тот же объект , на который ссылается MethodName.

Я думаю, вы бы проверили, равны ли строки :

if(arrMethods[i].getName().equals(MethodName)
...