ActivityGroup是個用來承載多個Activity的容器,自身也是繼承Activity,主要用於切換Activity(Layout),類似新浪微博軟件切換界面。
public class MainActivityGroup extends ActivityGroup {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main_layout);
}
}
用法與Activity類似,生命週期也一樣。onCreate->onStart->onResume->onPause->onStop->onDestroy
佈局文件的weight屬性這裏第一次派上了用途,我的佈局類似新浪微博的界面,上邊是一個刷新按鈕跟文字,下面是一排ImageView來點擊切換Activity,中間是Activity的佈局。上下的高度定義好以後,我要讓activity充滿剩餘空間,就用了weight=1這個屬性。其他用法暫時沒用到。
點擊開始用ActivityGroup來啓動子Activity:
1,activity_container(這是Group佈局裏面的用來裝Activity的Layout)要移除所有的view
activity_container.removeAllViews();
2,增加view到裏面
activity_container.addView(
this.getLocalActivityManager().startActivty(str_id,intent).getDecorView());
其中的ActivityManager是ActivityGroup私有的一個成員,用來管理子Activity,這裏用來啓動。參數是id,和一個intent對象。根據id用key-value的方式,把intent放入到自己的Map裏面,用於自己的管理。
(1)當StartActivity時,如果key是不存在的,那麼啓動一個新的Activity,然後把key與intent放到自己的map
(2)當key是存在的。那麼當前的Activity 與新的Activity要怎麼切換變化?
這就跟Intent的Flag相關了。第一,如果當前的Activity的intent.Flag設置的是多模式或者FLAG_ACTIVITY_SINGLE_TOP,那麼子Activity就會被切換到後臺,調用Intent傳來的Activity,這個新的Activity也會根據自身的Flag,而出現不同的生命週期變化。
舉個例子,如果每個子Activity都是這樣的方式啓動的
getLocalActivityManager().
startActivity(CampusConstants.ID_ACTIVITY[id], new Intent(MainActivityGroup.this,activity).
addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)).getDecorView());
那麼切換時,Activity就不用每一次都Oncreate重新建立
如果使用的是