2014-09-05 205 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。我究竟做錯了什麼?我是否應該傾聽A中的FLAG_ACTIVITY_NEW_TASK

+1

你必須有一個上下文來啓動一個活動。如果你有一個上下文,那麼你可以從幾乎每一個點開始活動 – 2014-09-05 02:57:46

+1

你在調用'startActivity()'嗎? – 2014-09-05 02:58:05

+0

startActivity不能在'B'內部調用,因爲'B'不是一個Activity。 @非法參數你能解釋上下文嗎? – 2014-09-05 02:58:54

回答

3

像這樣的東西應該工作:B類的

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 = new B(A.this); 
    b.startNewActivity("MainActivity");//the "MainActivity" is the className of the java class 

注意我發現這樣奇怪和矯枉過正。

+0

如果這行'A.class'可以是更通用的,可以用於其他活動,那麼我可以使用它。也許使用'context.class'(這可能會失敗)。 – 2014-09-05 03:08:14

+0

謝謝,這段代碼太棒了! – 2014-09-05 03:36:37

+0

@MikeJohn歡迎您。 – 2014-09-05 03:36:55