2015-04-28 3 views
1

Я пытаюсь получить все идентификаторы во время выполнения. Я использую отражение. но я получаю ClassNotFoundException.класс android R.id не найден во время выполнения

try { 
    aClass = classLoader.loadClass(getPackageName()+".R.id");  
    Field[] ID_Fields = aClass.getFields(); 
    int[] resArray = new int[ID_Fields.length]; 
    for(int i = 0; i < ID_Fields.length; i++) {  
     try { 
      resArray[i] = ID_Fields[i].getInt(null); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 
    } 
} catch (ClassNotFoundException e1) { 
     e1.printStackTrace(); 
} 

ответ

4

id является внутренним классом R. Вы должны использовать символ доллара $, чтобы получить доступ к нему

classLoader.loadClass(getPackageName()+".R$id"); 

вы можете также статический метод Class.forName

aClass = Class.forName(getPackageName()+".R$id"); 

Из документации:

Возвращает объект класса, связанный с классом или интерфейс с именем .