2012-07-13 4 views
1

Мы начали неофициальную группу разработки Android на работе. Каждый из нас будет добавлять полу-независимые действия в одно приложение. Вокруг вчерашнего дня лучшее, что я мог придумать, чтобы сделать это «легким», было, чтобы наша основная деятельность была GridView и позволяла разработчикам «регистрировать» свои действия в основной деятельности через элемент в жестко запрограммированном массиве ' ActionItems':Укажите имя java.lang.Class в текстовом файле?

private final ActionItem[] actionItems = { 
     new ActionItem(R.drawable.dms_to_dd, "DMS to/from DD", DegreeConverter.class) 
    }; 

где ActionItem только это:

public class ActionItem { 

    private int drawingID; 
    private String label; 
    private java.lang.Class<?> activity; 

    public ActionItem(int drawingID, String label, Class<?> activity) { 
     this.drawingID = drawingID; 
     this.label  = label; 
     this.activity = activity; 
    } 

    public int getDrawingID() { 
     return drawingID; 
    } 
    public String getLabel() { 
     return label; 
    } 
    public Class<?> getActivity() { 
     return activity; 
    } 
} 

Чтобы люди начали я создал первую простую активность/ActionItem и он зарегистрирован, как показано выше.

Мы хотим, чтобы в GridView и String было выделено изображение для маркировки и, самое главное, класс, который будет запущен через Intent, когда выбран соответствующий элемент GridView.

Все это работает. Однако было бы неплохо, если бы людям не пришлось редактировать основную активность, чтобы сделать эту работу. Я надеялся, что мы сможем прочитать эту же информацию (для ActionItem) из текстового файла перед заполнением GridView. Выделенный id и String не представляют проблемы. Итак, главный вопрос: как мы можем указать этот класс в текстовом файле?

Есть ли способ создать экземпляр java.lang.Class из имени (String/char [])? Есть ли лучший способ сделать то, что я описал выше?

Благодарим за предоставление дополнительной информации, если это полезно.

+0

Посмотрите на 'forName' метод' java.lang.Class'. –

+0

Спасибо за комментарий. Ответ ниже дал ту же информацию. Я думаю, что это именно то, что мне нужно. – Joey

ответ

0

Вы пробовали с:

Class.forName("com.something.MyClass") 

http://developer.android.com/reference/java/lang/Class.html#forName(java.lang.String)

Вы можете прочитать имя из файла, и установить строку в методе forName.

Таким образом, вы можете сделать что-то вроде этого:

public ActionItem(int drawingID, String label, String activityClassName) { 
    this.drawingID = drawingID; 
    this.label  = label; 
    this.activity = Class.forName(activityClassName); 
} 
+1

Я почти уверен, что это то, что мне нужно. Благодаря! – Joey

0

Используя отражение, пример ниже:

Class theClass = Class.forName("YourClass"); 
YourClass instancevariable = (YourClass)theClass.newInstance();