2013-07-25 72 views
3

我想在單個選項卡內使用多個片段。我的標籤頁活動延伸至SherlockFragmentActivity如何管理單個選項卡內的多個片段

現在我在onTabChanged()方法中爲第一個選項卡添加第一個片段。我從第一個選項卡的第一個片段中替換另一個片段。但沒有當我去第二個標籤,然後再次打開第一個標籤,第一個標籤的狀態不維護和第一個片段變得可見,而不是第一個標籤的第二個片段。

我需要幫助如何在單個選項卡中保持片段的權益以及如何在單個選項卡中彈出退出片段前端。

任何機構都有想法?

+0

您使用的是viewpager? –

+0

不是現在。但我準備好使用它,如果它是有用的,並可能解決我的問題。請給我一樣的暗示。 –

+0

這是我的問題之一,代碼可以幫助你。我使用適配器來管理標籤+ viewpager中的片段http://stackoverflow.com/questions/17815305/abs-viewpager-manage-orientation-change –

回答

1

如果使用兩個選項卡,則必須分別保持兩個片段爲每個標籤即FragmentA爲TAB1和FragmentB爲TAB2和FragmentA的xmls,FragmentB應該有用於FrgmentTransaction的FrameLayout。的FragmentA即frag_a.xml

XML:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/fragmentA_container" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

</FrameLayout> 

FragmentB即frag_b.xml的XML:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/fragmentB_container" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

</FrameLayout> 

對於TAB1,永遠做使用R.id.fragmentA_container進行交易。即從第一個選項卡中的第一個片段(片段A)內取代另一個片段。如下面的代碼

在FragmentA:

Fragment fragment = new YourFragment(); 
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
getSupportFragmentManager().popBackStack(); 
fragment.setArguments(null); 
ft.replace(R.id.fragmentA_container, fragment); 
ft.commit(); 

對於TAB2,總是使用R.id.fragmentB_container做交易。即從第二個選項卡中的第二個片段(FragmentB)內取代另一個片段。如下面的代碼

在FragmentB:

Fragment fragment = new YourFragment(); 
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
getSupportFragmentManager().popBackStack(); 
fragment.setArguments(null); 
ft.replace(R.id.fragmentB_container, fragment); 
ft.commit(); 
0

下面是用於在活動管理多個片段的樣品代碼:

public class MainActivity extends FragmentActivity { 

private FragmentManager fragmentManager; 
Fragment currentFragment; 
Fragment1 initialFragment; 
Fragment2 nextFragment; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_activity); 
    fragmentManager = getSupportFragmentManager(); 
    initialFragment = (Fragment1) fragmentManager.findFragmentById(R.id.initial_fragment); 
    nextFragment = (Fragment2) fragmentManager.findFragmentById(R.id.next_fragment); 
    nextFragment(); 
} 

public void onNext(View v) { 
    // User pressed next button on initial fragment 
    showNextFragment(); 
} 

private void showFragment(Fragment fragmentToShow) { 
    Fragment[] fragments = { initialFragment, nextFragment /*... */ }; 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    for(Fragment fragment : fragments) { 
     if(fragment != fragmentToShow) { 
      fragmentTransaction.hide(fragment); 
     } 
    } 
    fragmentTransaction.show(fragmentToShow); 
    fragmentTransaction.commit(); 
} 

private void showInitialFragment() { 
    currentFragment = initialFragment; 
    showFragment(currentFragment); 
} 

private void showNextFragment() { 
    currentFragment = nextFragment; 
    showFragment(currentFragment); 
} 

} 
+0

ragmentManager.findFragmentById()總是返回null。可能是什麼原因? –

相關問題