TabActivity中某一個tab內切換activity的方法

之前寫的程序要用到TabActivity,其中一個tab下有個多級列表,其實就是像“設置‘切換頁面一樣,倒是如果直接啓動一個activity,你會發現這個activity會變成全屏的,和之前的TabActivity半毛錢關係木有,所以,當時我感覺這個問題很麻煩呢。
後來我進去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之間的切換,會發現很有意思。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章