2012-10-22 99 views
7

嘿,我正在開發Android應用程序,我想爲每個選項卡實現一個活動組。但由於Activity Group已被棄用,我必須使用Fragments。我搜索了最後幾天,並對該主題做了一些研究,但我仍然沒有得到它。下圖描述了我想要做的事情。我也是直接從iOS來的,我需要一些關於我的理論的反饋。Android Fragment vs. Activity Group

enter image description here

正如你可以看到每一個片段由一個片段的WebView的。當用戶點擊該WebView Fragment中的一個鏈接時 - 請求被捕獲,並且一個新的Fragment被替換,該碎片再次包含一個WebView並加載上一個Fragment中單擊的鏈接。用戶決定返回第一個片段並按下後退按鈕。

碎片應該以相反的順序從堆棧中彈出,直到他再次看到第一個碎片。理想情況下,每個片段都應該保存他的實例狀態,以便當用戶返回時WebView不需要再次加載站點。

我遇到過ActionBar Sherlock,它提供了有關碎片選項卡的示例。還有一個片段堆棧的例子。將這兩個示例結合起來應該是理想的,這樣每個選項卡都由一個片段堆棧組成。

我的代碼結構如下所示:

我TabHost片段

public class MyActivity extends SherlockFragmentActivity { 
static TabHost mTabHost; 
static TabManager mTabManager; 

public static int THEME = R.style.Theme_Sherlock_Light; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setTheme(THEME); //Used for theme switching in samples 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.fragment_tabs); 
    mTabHost = (TabHost)findViewById(android.R.id.tabhost); 
    mTabHost.setup(); 
    mTabManager = new TabManager(this, mTabHost, R.id.myRealTabContent); 

    // adding some Fragment Tabs 
    mTabManager.addTab(mTabHost.newTabSpec(tabNames[i]).setIndicator(tabNames[i]), 
       FragmentStackSupport.CountingFragment.class, bundle); 


    if (savedInstanceState != null) { 
     mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); 
    } 
} 


@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("tab", mTabHost.getCurrentTabTag()); 
} 



// defining the Tab Manager 

將如何片段堆棧爲每個標籤應該是什麼樣子? 目前我有一個片段活動與每個選項卡內的片段。但我沒有達到我需要的邏輯。

這裏是我的代碼:(?還是有在網絡上的任何實例)My Fragment with WebView inside

我會很高興一些反饋和提示。我也對內存有一些擔憂 - 當用戶點擊並單擊並單擊並且內存必須將每個碎片保存在堆棧中時。

乾杯。

+5

對於一個很好解釋的問題+1。 –

+0

你有沒有找到一個解決這個問題的可靠解決方案? –

回答

1

我想不出有什麼好的理由,每次用戶點擊鏈接時都會創建一個新的片段。你有沒有這樣做的理由?如果您僅從shouldOverrideUrlLoading()返回false而不是創建新片段,則WebView將加載新頁面,如果您想返回,則可以使用canGoBack()和goBack()方法。要處理後退按鈕按鈕,您可以在您的活動中覆蓋onKeyDown,並執行類似操作:

if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack() { 
     myWebView.goBack(); 
     return true; 
    } 
+0

感謝您的回覆。我同意這不是最理想的,但我有我的理由。雖然我認爲我會遵循你的建議 - 它更容易。 不過,我對如何爲每個選項卡實現片段堆棧感興趣。 –

+0

好吧,既然你問了,我確定這不是一個好主意,但你可以從字面上爲每個選項卡設置一個Stack(或其他數據結構)碎片。每次用戶點擊鏈接時,都會將該片段添加到該選項卡的堆棧中(出於顯而易見的原因,您不希望將任何片段添加到應用程序的堆棧中)。然後,按下後​​退按鈕,看看當前顯示的選項卡的堆棧是否非空,如果是,則彈出下一個選項以顯示在正確的選項卡中。 – ajpolt

+0

也許每個標籤都有單獨的活動,然後每個活動都會有它自己的片段? – tbkn23

相關問題