2014-01-02 6 views
2

С помощью XML я могу определить метод OnClick, который называется, если я нажму на представлении:Определить OnClick метод в другом классе

android:onclick="onClick" 
public void onClick(View v) 

Этот метод должен быть определен в классе активность, которая видна , Теперь у меня много элементов управления с разными методами onClick. Это делает класс Activity очень запутанным, так есть ли способ определить эти методы в другом классе?

Конечно, я могу использовать разные классы или onClickListener в самом классе, но с xml это довольно легко. С onClickListeners приходит какой-то «неиспользуемый код», потому что на данный момент у Java нет выражения lamda, и это тоже запутывает. Я думаю, что xml - это быстрый и понятный метод, но нет, если у вас есть так много методов, как у меня на данный момент.

+0

Какой еще класс вы здесь имеете в виду? – Raghunandan

+0

просто используйте один клик и проверьте идентификатор вида, для которого было нажато – tyczj

ответ

2

Глядя на источники, похоже, он должен быть методом, который находится в классе, который расширяет Контекстный класс, с которым View был создан:

http://androidxref.com/4.4_r1/xref/frameworks/base/core/java/android/view/View.java#3780

взгляда в эту линию:

getContext().getClass().getMethod(...) 

отражение делается на getContext()

Вы можете сделать то же, что предлагают другие ответы, включить идентификатор вида и функции вызова в других классы. Или, если ваше приложение сложно, возможно, разделите макет на фрагменты?

0

Я не совсем уверен, что вы хотите, но вы можете просто использовать различные имена методов, он не должен быть «OnClick»

Других Кроме того, я считаю, что они должны быть в этой деятельности.

0

Любой метод onClick, определенный в XML, вызывается в Activity, на котором размещается этот макет. Вы можете перенаправить все входящие клики на другой класс, если вы действительно этого хотите, но лучший способ - это либо OnClickListener, либо использовать разные имена методов onClick для каждой кнопки.

0
make activity implement onclick listener and implement the method like below. 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    int key = v.getId(); 
    switch (key) { 
    case R.id.message_field: 
      // handle click 

     break; 

    default: 
     break; 
    } 
} 
Смежные вопросы