2012-07-13 148 views
0

我實現我的應用程序選項卡。爲此,我創建了一個類來處理選項卡中的活動。我的問題是我像A,B,C,D一樣接連開始了一些活動。現在我想從D迴歸活動A,並且其他活動如B,C和D應該被銷燬。請幫我實施這個。這裏是我用來處理活動的代碼...如何從孩子的活動轉向家庭活動tabhost

public class TabGroupActivity extends ActivityGroup { 

protected Context mCTX; 
protected ArrayList<String> mIdList; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if(mIdList == null){ 
     mIdList = new ArrayList<String>(); 
    } 

    //set context 
    mCTX = this; 

} 

public void startChildActivity(String Id, Intent intent){ 
    Id+= System.currentTimeMillis(); 
    Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 

    if (window != null) { 
     mIdList.add(Id); 
     setContentView(window.getDecorView()); 
    } 
} 

@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 

    int length = mIdList.size(); 
    if(length > 0){ 
     Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1)); 
     current.finish(); 
    } 

} 

@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()); 
} 


} 

當我開始活動時,我將使用下面的代碼。

Intent locIntent = new Intent(HomeActivity.this,SomeActivity.class); 
TabGroupActivity parent = (TabGroupActivity) getParent(); 
parent.startChildActivity("some id", locIntent); 

我還有一個疑問...如何將一個選項卡中的活動切換到另一個選項卡中的活動。 在此先感謝

+0

仍在尋求解決方案 – Aju 2012-08-28 13:58:44

+0

做你得到了解決? – 2014-09-30 07:55:57

回答

5

不要使用活動一個TabHost,它是一種浪費內存裏面。我寧願使用片段。您可以輕鬆地將它們添加到TabHost。這是一個很好的教程:

http://thepseudocoder.wordpress.com/2011/10/13/android-tabs-viewpager-swipe-able-tabs-ftw/

+0

謝謝....我認爲這是非常有用的....我會嘗試用這個... – Aju 2012-07-13 09:27:24

+0

我想你特林讓喜歡的TabBar導航在iOS到你的Android應用程序。這不是一個好主意。嘗試以Android方式重新考慮你的用戶界面。如果你看看大多數android應用程序,那麼當你有一個TabHost時,它只能在單一級別(根目錄)上工作,當你更深入時,應用程序通常會啓動一個沒有TabHost的新活動。 – 2012-08-29 18:50:00

+0

我正在嘗試製作一個Ios Like tabbar。客戶只要這樣就可以了。通過使用ActivityManager,一切正常。我希望它能從孩子的活動中回到家庭活動中,並且消除這兩項活動之間的所有其他活動。 – Aju 2012-09-03 12:53:51

1

你爲什麼不設置標誌FLAG_ACTIVITY_CLEAR_TOP新的意圖,你在呼喚回去這是起步較早的活動。

你需要設置在該活動清單文件的launchMode到多個實例,並且只使用FLAG_ACTIVITY_CLEAR_TOP。

如前所述FLAG_ACTIVITY_CLEAR_TOP理論。

例如,考慮由以下活動組成的任務:A,B,C,D。如果D調用startActivity()並解析爲活動B的組件,則C和D將完成,B收到給定的意圖,導致堆棧現在是:A,B。

我已經使用它,它工作得很好,所以請讓我知道,如果它對您有意義或者如果您在實現它時遇到任何問題。

+0

我試過了,但沒用......通常這種方式對我有用。這裏我使用Tab和Activitygroup來處理所有的活動。在這裏它不工作.. – Aju 2012-09-05 14:13:02

+0

然後,你的ActivityGroup類必須有一些錯誤,因爲它寫在官方的Android網站上,它爲我工作..你可以在這裏粘貼你的活動組代碼。 – Shachillies 2012-09-06 07:28:12

+0

我在問題中給出的代碼... – Aju 2012-09-06 12:14:18