2011-12-11 85 views
0

我做了一個應用程序,其中我在第一個選項卡上做了5個選項卡,有一個ListView當我點擊任何ListItem時,我打算用另一個活動調用另一個活動。現在我們遇到了一個問題,因爲我點擊Listitem時&這個選項卡會Dissapears如何顯示我的SubActivity上的Tabs。如何在SubActivity中顯示選項卡?

任何幫助將得到處理。

回答

0

這是Android中的正常行爲,不是很好。

我通常會創建一個標籤從該類延伸的第一活動

public class TabActivityGroup extends ActivityGroup { 
    protected LocalActivityManager manager; 
    protected ArrayList<String> mIdList; 

    public TabActivityGroup() { 
     this(false); 
    } 

    public TabActivityGroup(boolean single) { 
     super(single); 
    } 

    public void onCreate(Bundle ins) { 
     super.onCreate(ins); 
     manager = getLocalActivityManager(); 
     mIdList = new ArrayList<String>(); 
    } 

    public void startChildActivity(String Id, Intent intent) { 
     Log.d(this.getClass().getName(), "startChildActivity " + Id + "/" + mIdList.size()); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     Window window = manager.startActivity(Id, intent); 
     if (window != null) { 
      mIdList.add(Id); 
      setContentView(window.getDecorView()); 
     } 
    } 

    @Override 
    public void finishFromChild(Activity child) { 
     Log.d(this.getClass().getName(), "finishFromChild("+child.getClass().getName()+") mIdList.size " + mIdList.size()); 
     int index = mIdList.size() - 1; 
     if (index < 1) { 
      finish(); 
     }else{ 
      Log.e(getClass().getName(), "destroy " + mIdList.get(index)); 

      manager.destroyActivity(mIdList.get(index), true); 
      mIdList.remove(index); 
      index--; 
      String lastId = mIdList.get(index); 
      Activity previous = manager.getActivity(lastId); 

      setContentView(previous.getWindow().getDecorView()); 
     } 
    } 

    /** 
    * Overrides the default implementation for KeyEvent.KEYCODE_BACK so that 
    * all systems call onBackPressed(). 
    */ 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      goBack(); 
      return true; 
     } 
     return super.onKeyUp(keyCode, event); 
    } 


    public void goBack() { 
     Log.d(this.getClass().getName(), "goBACK() : " + mIdList.size()); 
     int length = mIdList.size(); 
     if (length > 1) { 
      Activity current = manager.getActivity(mIdList.get(length - 1)); 
      current.finish(); 
     }else{ 
      ((MyApplication)getApplication()).systemExit(this); 
        //This just calls to System.exit 
     } 
    } 
} 

然後,您可以創建一個標籤這樣

public class TabOne extends TabActivityGroup { 

    @Override 
    public void onCreate(Bundle b) { 
     super.onCreate(b); 

     startChildActivity(OneActivity.class.getName(), new Intent(this, OneActivity.class)); 
    } 

事情要記住:

  • 該標籤沒有任何內容,只是啓動真正的標籤活動
    startChildActivity方法。當 回到第一個活動並且應用程序需要關閉時,這會獲得很好的行爲。

  • 要非常小心的Context對你有
    使用TabActivityGroup背景下的子活動。您可以通過
    調用getParent()手動完成此操作,或者更好地定義一個循環調用 getParent()直到找到根父級的方法。

相關問題