後來我進去TabActivity裏面發現,TabActivity其實就是繼承自ActivityGroup,然後想起來之前看到的一片文章,用ActivityGroup 來實現自定義TabActivity功能,到這裏其實應該就很簡單了,無非是爲TabActivity增加一個subActivity,不過這裏我嫌麻煩,索性不和TabActivity扯上關係,於是 就用了一個嵌套ActivityGroup 的實現方式,其實就是把一個TabActivity的子頁換成一個ActivityGroup ,然後這個ActivityGroup 下面再放上幾個subactivity。當然,ActivityGroup 繼承自Activity,所以你也要把它當作activity去mainfest註冊一下。
我馬上就要坐車回家啦,時間比較緊,格式醜陋點,大家見諒。下面是關鍵代碼:
TabActivity的用法我就不說了,一搜一大把,關鍵是ActivityGroup 內activity的切換,一個繼承自ActivityGroup 的class MyActivityGroup,MyActivityGroup在TabActivity裏面的使用和普通activity一樣,兩個子activitySubAActivity.class和SubBActivity.class, 首先是MyActivityGroup 啓動時要啓動一個subactivity,我們啓動SubAActivity.class,MyActivityGroup 的onCreate實現,
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.myactivitygroup);//其實這個layout裏面只有一個id爲myactivitygroup _view的LinearLayout
- container=(LinearLayout) findViewById(R.id.myactivitygroup _view);//
- container.removeAllViews();
- Intent intent=new Intent(MyActivityGroup .this,SubAActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- Window subActivity=getLocalActivityManager().startActivity("SubAActivity",intent);
- View view=subActivity.getDecorView();
- container.addView(view); //下面的代碼是爲了保證subactivity顯示正常,必須寫在這行後面,不然的話,view對象尚未產生,然後。。。你懂的,addView應該也是用InFlate實現的
- LinearLayout.LayoutParams params=(LayoutParams) view.getLayoutParams();
- params.width=LayoutParams.FILL_PARENT;
- params.height=LayoutParams.FILL_PARENT;
- view.setLayoutParams(params);
- }
複製代碼
下面是從SubAActivity跳轉到SubBActivity,(從SubBActivity返回SubAActivity實現方法一樣,只不過放的位置不一樣)假設我在一個listview的OnClickListener裏面實現
- list.setOnGroupClickListener(new OnGroupClickListener() {
- @Override
- public boolean onGroupClick(ExpandableListView parent, View v,
- int groupPosition, long id) {
- LinearLayout container=(LinearLayout)((ActivityGroup)getParent()).getWindow().findViewById(R.id.myactivitygroup _view);//注意這裏,還是獲取group的view
- container.removeAllViews();
- Intent intent=new Intent(SubAActivity.this, SubBActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- Window subActivity=((ActivityGroup)ProvinceParkActivity.this.getParent()).getLocalActivityManager().startActivity("SubBActivity",intent);
- View view=subActivity.getDecorView();
- container.addView(view);
- LinearLayout.LayoutParams params=(LayoutParams) view.getLayoutParams();
- params.width=LayoutParams.FILL_PARENT;
- params.height=LayoutParams.FILL_PARENT;
- view.setLayoutParams(params);
- return true;
- }
- });
複製代碼
仔細觀察你會發現,這兩段代碼的實現思路是一樣的,另外對於activitygroup的實現方式也大概能有些推測。
在subactivity中不要調用finish,不然整個activity樹都會掛掉,你仔細觀察subactivity和tab之間的切換,會發現很有意思。