2013-11-28 2 views
0

Как вызвать метод с содержимым строки? У меня есть сказать, 4 строки:Как назвать методы вызова с содержимым строки

swimming 
football 
rugby 
hockey 

И я также 4 методы называются:

swimming 
football 
rugby 
hockey 

У меня есть ListView с этими строками, заполняющих ListView (это просто пример, я на самом деле есть ListView 200 строк) Таким образом, для 200 строк, вместо того чтобы писать, если заявление:

if(string.equals("Swimming")){swimming();} 

могу ли я сделать это как-нибудь, что я могу иметь один метод OnClick, что, когда элемент в ListView нажал было бы г ун-то вроде:

[string](); 

Где [строка] является некоторый код, чтобы получить то, что строка была выбрана из ListView

в основном сохранить себя писать 200, если заявления, мог я иметь его, поэтому он автоматически запускает метод названный в честь строки?

+0

Что делают ваши методы? Разве они такие разные? Не можете ли вы сделать 1 метод, который принимает строковый параметр и действует соответственно? –

+0

методы определяют строки в соответствии с тем, что было нажато, все строки будут разными – cw1998

ответ

3

Измененная с обработкой ошибок:

try 
{ 
    String string = "swimming"; 
    MyActivity.class.getMethod(string, null).invoke(this, null); 
} 
catch(Throwable t) 
{ 
    t.printStackTrace(); // might want to do something else here 
} 
+0

Я не хочу писать это для всех 200 нечетных строк, могу ли я заменить строку «плавание» только строкой (которая является переменной, 'сТРОКА;') Спасибо – cw1998

+0

конечно, вы можете –

+0

затмение хочет, чтобы исправить эту линию к следующему: 'попробовать { \t \t \t Mods_info.class.getMethod (ВФ, нуль) .invoke (это, нуль); \t \t} задвижка (IllegalArgumentException е) { \t \t \t // TODO автоматическая генерация улова Блокировать \t \t \t e.printStackTrace(); \t \t} задвижка (IllegalAccessException е) { \t \t \t // TODO автоматическая генерация улова блока \t \t \t е.printStackTrace(); \t \t} задвижка (InvocationTargetException е) { \t \t \t // TODO автоматическая генерация улова Блокировать \t \t \t e.printStackTrace(); \t \t} задвижка (NoSuchMethodException е) { \t \t \t // TODO автоматическая генерация улова Блокировать \t \t \t e.printStackTrace(); \t \t} ' – cw1998

1

Используйте отражение.

String type = "swimming"; 
Method m = this.getClass().getDeclaredMethod(type, null); 
m.invoke(this, null); 
0

Для этого необходимо использовать отражение. Вместо того, чтобы набирать полный пример this Сообщение SO и принятый ответ содержат все сведения, необходимые для его реализации. Обратите внимание, что есть накладные расходы на использование отражения, а на мобильном устройстве стоимость будет больше. Если вы могли бы поделиться более подробными сведениями о том, что вы пытаетесь сделать, может возникнуть более элегантное решение большей проблемы, которую вы пытаетесь решить.

Смежные вопросы