2013-04-22 23 views
0

我有2個選項卡和2個對應的片段。在調用LAUNCH Activity時,兩個選項卡都被添加,然後第一個添加的將被顯示。因此,第一個碎片onCreateView被稱爲第二碎片不是。
在我的情況下,這是一個問題,因爲第一個Fragment必須調用第二個Fragment上的方法。在第二個片段中有一個Objectreference,它將通過在第二個片段中調用onCreateView來設置。 所以我用下面的代碼來解決這個調用片段onCreateView與上下文中的選項卡

actionBar.setSelectedNavigationItem(1); 
actionBar.setSelectedNavigationItem(0); 

它的工作原理,但在我看來,必須有解決這個問題的另一種可能性。就像調用第二個片段的onCreateView一樣?

這裏是相關的代碼片段。監聽器的實現方式與android-dev中的示例一樣,只是對小的更改不會影響我的問題。

simplexFragment對應於第一片段
graphicFragment對應於第二片段

// adds two tabs 
actionBar.addTab(actionBar.newTab().setText("Input").setTabListener(new TabListener(null, "input_fragment"))); 

graphicFragment = new GraphicFragment(); 

actionBar.addTab(actionBar.newTab().setText("Graphic").setTabListener(new TabListener(graphicFragment, "graphic_fragment"))); 
simplexFragment.setGraphics(graphicFragment); // sets the internal reference! 

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

// selects the Tab so the GraphicFragments onCreateView will be called 
actionBar.setSelectedNavigationItem(1); 
actionBar.setSelectedNavigationItem(0); 

感謝支持。

回答

0

在我的情況下,這是一個問題,因爲第一個片段必須調用第二個片段的方法。

這不是Fragments是如何工作的。這個想法是一個Fragment應該是獨立的和可重複使用的,一個Fragment不應該知道另一個存在(或至少不應該依賴存在任何其他Fragment)。

例如,假設您有3 Fragments且ActivityA使用FragmentA和FragmentB,但是您有另一個使用FragmentA和FragmentC的Activity(ActivityB)。在這種情況下,FragmentA不知道其他Fragment是(B還是C),甚至根本不應該預期會有另一個Fragment

達到目標的方法是在Activity上使用回調方法,並使其在任何其他Fragments(如果存在)上執行操作。它可以通過調用其他Fragments上的公共方法或通過在創建其他Fragments時在「參數」Bundle中傳遞數據來實現。

+0

我已經使用了Fragments,因爲我想構建Tablet和Mobile-Phone的UI。這更多的是一個歷史問題 - 首先我使用回調方法,但是在實現選項卡時,兩個片段(每個選項卡包含)之間的同步存在問題,我必須從片段A - > B 。 OT:作爲模式和像片段這樣有趣的概念的粉絲,真的很傷心,我必須以這種方式使用這個概念...... – sascha10000 2013-05-06 09:16:16

相關問題