2013-10-08 47 views
2

我正在使用我的應用程序中的選項卡。在TabHost類上工作以使其自定義。Android中的TabHost中沒有調用OnResume()?

當我有母公司 - >子活動,在這種情況下對回按,父活動的的onResume沒有在我的應用程序調用。

我使用下面的代碼:

public class TabGroupActivity extends ActivityGroup { 

    private ArrayList<String> mIdList; 
    private HashMap<String, Window> mWindowStorage = new HashMap<String, Window>();//UPDATED 
    private boolean _isFromResume; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
     if (mIdList == null) mIdList = new ArrayList<String>(); 
    } 

    /** 
    * This is called when a child activity of this one calls its finish method. 
    * This implementation calls {@link LocalActivityManager#destroyActivity} on the child activity 
    * and starts the previous activity. 
    * If the last child activity just called finish(),this activity (the parent), 
    * calls finish to finish the entire group. 
    */ 
    @Override 
    public void finishFromChild(Activity child) { 
     LocalActivityManager manager = getLocalActivityManager(); 
     int index = mIdList.size()-1; 

     if (index < 1) { 
      finish(); 
      return; 
     } 
     String actName = mIdList.get(index); 
     manager.destroyActivity(actName, true); 
     mWindowStorage.remove(actName); 
     mIdList.remove(index); index--; 
     String lastId = mIdList.get(index); 
     Window newWindow = null; 
     if(mWindowStorage.containsKey(lastId)){ 
      newWindow = mWindowStorage.get(lastId); 
     }else{ 
      Intent lastIntent = manager.getActivity(lastId).getIntent(); 
      newWindow = manager.startActivity(lastId, lastIntent); 
     } 
     setContentView(newWindow.getDecorView()); 
    } 

    /** 
    * Starts an Activity as a child Activity to this. 
    * @param Id Unique identifier of the activity to be started. 
    * @param intent The Intent describing the activity to be started. 
    * @throws android.content.ActivityNotFoundException. 
    */ 
    public void startChildActivity(String Id, Intent intent) { 
     Window window = null; 
     if(mWindowStorage.containsKey(Id)){ 
      window = mWindowStorage.get(Id); 
      if(_isFromResume){ 
       setFromResume(false); 
       mIdList.clear(); 
       mIdList.add(Id); 
       mWindowStorage.clear(); 
       mWindowStorage.put(Id, window); 
      } 
     }else{ 
      window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
      if (window != null) { 
       mIdList.add(Id); 
       mWindowStorage.put(Id, window); 
      } 
     } 
     setContentView(window.getDecorView()); 
    } 

    /** 
    * The primary purpose is to prevent systems before android.os.Build.VERSION_CODES.ECLAIR 
    * from calling their default KeyEvent.KEYCODE_BACK during onKeyDown. 
    */ 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

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

    /** 
    * If a Child Activity handles KeyEvent.KEYCODE_BACK. 
    * Simply override and add this method. 
    */ 
    @Override 
    public void onBackPressed () { 
     int length = mIdList.size(); 
     if (length > 0) { 
      Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1)); 
      current.finish(); 
     } 
    } 

    public void setFromResume(boolean isFromResume) { 
     _isFromResume = isFromResume; 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Activity activity = getLocalActivityManager().getCurrentActivity(); 
     RegisterDeRegisterResponse register = RegisterDeRegisterResponse 
       .getInstance(); 
     register.notifyRegisteredUser(requestCode, resultCode, data); 
     register.deRegisterForServerResponse((IResultResponse) activity); 
    } 
    public void switchTab(int i) { 
     WeddingTabActivity parentActivity = (WeddingTabActivity) getParent(); 
     parentActivity.switchTab(i); 
    } 
} 

默認startChildActivity(字符串ID,意圖意圖)和finishFromChild(活動子)方法,但在這種情況下,每一個活動是BackPress重新啓動也工作了。

 @Override 
     public void finishFromChild(Activity child) { 
      LocalActivityManager manager = getLocalActivityManager(); 
      int index = mIdList.size()-1; 

      if (index < 1) { 
       finish(); 
       return; 
      } 

      manager.destroyActivity(mIdList.get(index), true); 
      mIdList.remove(index); index--; 
      String lastId = mIdList.get(index); 
      Intent lastIntent = manager.getActivity(lastId).getIntent(); 
      Window newWindow = manager.startActivity(lastId, lastIntent); 
      setContentView(newWindow.getDecorView()); 
     } 

public void startChildActivity(String Id, Intent intent) {  
Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
     if (window != null) { 
      mIdList.add(Id); 
      setContentView(window.getDecorView()); 
     }  
    } 
+0

不要使用tabhost,我在項目之一中使用,最後最終拉掉我的頭髮。 – dd619

+0

你在說什麼.... :(我必須以任何方式做到這一點...... –

+0

我只是說,而不是tabhost使用操作欄,它很容易。 – dd619

回答

-1

在接頭主機我已經做了整個項目,然後同樣的問題,我有的onResume不會被調用..和活動組現在已經過時,你將不能夠調用的onResume檢查this可能它會幫助..運氣好的