2014-09-05 2 views
1

У меня есть класс Activity.На начальном этапе Деятельность:

public class A extends Activity 
{ 
} 

Тогда у меня есть класс, который не является активность, но я хочу, чтобы начать активность A.

public class B 
{ 
    public B() 
    { 
     Intent I = new Intent(null, A.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    } 
} 

Код взять от этого вопроса, который должен работать: Calling startActivity() from outside of an Activity? Однако, когда я запускаю его я никогда не изменюсь от моей первой активности на активность A. Что я делаю не так? Должен ли я слушать FLAG_ACTIVITY_NEW_TASK внутри A?

+1

у вас должен быть контекст для запуска Activity. Если у вас есть контекст, вы можете начать активность почти с каждой точки –

+1

Вы вызываете 'startActivity()'? –

+0

startActivity не может быть вызван внутри 'B', потому что' B' не является активностью. @IllegalArgument вы можете объяснить контекст? –

ответ

3

Что-то, как это должно работать:

public class B { 
Context context; 

public B(Context context) { 
    this.context = context; 

} 

public void startNewActivity(String str) { 
    try { 
     Intent i = new Intent(context, Class.forName(str)); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 
} 

Пример использования класса B:

B b = new B(A.this); 
    b.startNewActivity("MainActivity");//the "MainActivity" is the className of the java class 

Примечание Я нахожу этот способ Wierd и излишним.

+0

Я мог бы использовать его, если эта строка 'A.class' может быть чем-то более общим, что будет работать для других действий. Может быть, использовать 'context.class' (что, вероятно, не получится.) –

+0

Спасибо, этот код потрясающий! –

+0

@MikeJohn добро пожаловать. –

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