2013-04-26 1 views
0

У меня есть БД с именем класса многих деятельности, например:Начать новую деятельность получает класс струнный

Activity1Name.class 
Activity2Name.class 
Activity3Name.class 

и т.д.

этот метод

public startNewActivity(String activityName){ 
    Intent myActivity = new Intent(CurrentClass.this, activityName); 
       startActivity(myActivity); 
} 

ясно не работает, поскольку намерение

Intent myActivity = new Intent(CurrentClass.this, activityName); 

нуждается в классе, а не в String с именем класса,

Как я мог получить класс по имени функции String?

Я хочу, чтобы не объявлять слишком много намерений, используя только намерение, которое мне нужно во время выполнения.

+0

вы можете передать .class в качестве аргумента в свой метод –

+0

Нет, я не могу, потому что я получил класс имен как String из БД. – AndreaF

ответ

0

Вы можете загрузить с помощью отражения класса, например:

public startNewActivity(String activityName){ 
    try { 
     Class<?> clazz = Class.forName(getPackageName() +"." +activityName); 

     Intent myActivity = new Intent(CurrentClass.this, clazz); 
     startActivity(myActivity); 

    } catch (Exception e) { 
     Log.e("TAG","Error: " +e.getStackTrace()); 
    } 
} 

Если вы предоставляете полное имя класса (включая имя пакета), вы не нужен звонок getPackageName().

Надеюсь, это поможет ... Приветствия!

3
Class<?> clazz = Class.forName("yourPackage.YourActivityName"); 

Intent myActivity = new Intent(CurrentClass.this, clazz); 

Пример:

Class <?> clazz = Class.forName("com.test.testActivity"); 
1

Как я мог получить класс струной activityName?

Я думаю, что нужно что-то вроде этого:

Class<?> target = Class.forName(<yourPackage>.ActivityName); 
Intent i = new Intent(Caller.this, target); 

В вашем случае вам нужно получить от вашей строки базы данных от 0 до точки позиции.

Псевдо-код:

String stringFromDb = "Activity1Name.class"; 
int i = stringFromDb.lastIndexOf("."); 
String actName = stringFromDb.subString(0, i); 
Class<?> target = Class.forName(<package> + "." + actName); // getPackageName() 
Intent i = new Intent(Caller.this, target); 
0

Просто введите строку в название деятельности. This Ответ может быть вашим решением проблем. Надеюсь это поможет.

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

  • Нет связанных вопросов^_^