詮亞歷克斯Volovoy的答案多一點 -
的情況下,u的得到這個問題的片段,getActivity()工作正常獲得上下文
在其他情況下:
如果你不想使用 -
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend
然後作出這樣的功能在你的OutsideClass -
public void gettingContext(Context context){
real_context = context;//where real_context is a global variable of type Context
}
現在,在您的主要活動時,你永遠做一個新OutsideClass調用上面的方法,你定義OutsideClass給活動的背景後,立即作爲論據。 另外,在您的主要活動做一個功能 -
public void startNewActivity(final String activity_to_start) {
if(activity_to_start.equals("ACTIVITY_KEY"));
//ACTIVITY_KEY-is a custom key,just to
//differentiate different activities
Intent i = new Intent(MainActivity.this, ActivityToStartName.class);
activity_context.startActivity(i);
}//you can make a if-else ladder or use switch-case
現在回到你OutsideClass,並開始新的活動做一些像這個 -
@Override
public void onClick(View v) {
........
case R.id.any_button:
MainActivity mainAct = (MainActivity) real_context;
mainAct.startNewActivity("ACTIVITY_KEY");
break;
}
........
}
這樣你就可以開始不同活動從不同的OutsideClass調用而不會弄亂標誌。
注 - 儘量不要通過構造函數爲片段緩存上下文對象(使用適配器,它很好)。片段應該有一個空的構造函數,否則應用程序在某些情況下會崩潰。
記得打電話
OutsideClass.gettingContext(Context context);
中的onResume()函數也是如此。
我認爲亞歷克斯的答案應該是「接受」解決您的問題,因爲它以更通用的方式糾正了您提到的錯誤 – 2012-10-15 07:10:00
我喜歡這個「這真的是你想要的嗎?」 ...我之前收到一條消息說:「你確定你沒有忘記在某處註銷廣播接收器嗎?」真棒!所有這些小小的信息都會幫助我們疏導。 – 2016-05-25 11:23:51