2013-07-25 4 views
3

Я хочу использовать несколько фрагментов внутри одной вкладки. моя активность вкладок продолжается SherlockFragmentActivity.Как управлять несколькими фрагментами внутри одной вкладки

Теперь я добавляю первый фрагмент для первой вкладки в методе onTabChanged(). и я заменяю другой фрагмент из первого фрагмента на первой вкладке. Но нет, когда я перехожу на вторую вкладку, а затем снова открываю первую вкладку, состояние первой вкладки не поддерживается, а первый фрагмент становится видимым, а не вторым фрагментом первой вкладки.

Мне нужна помощь в том, как поддерживать долю фрагментов в пределах одной вкладки и как выходить из фронта фрагмента в пределах одной вкладки.

У любого органа есть идея?

+0

Вы используете ViewPager? –

+0

Не сейчас. но я готов использовать его, если он полезен и может решить мою проблему. Пожалуйста, дайте мне намек на то же самое. –

+0

Это один из моих вопросов, код может вам помочь. Я использую адаптер для управления фрагментами на вкладках + просмотрщик http://stackoverflow.com/questions/17815305/abs-viewpager-manage-orientation-change –

ответ

1

Если вы используете две вкладки, вы должны поддерживать два фрагмента отдельно для каждой вкладки т.е. Fragmenta для tab1 и FragmentB для tab2 и xmls FragmentA, FragmentB должен иметь FrameLayout для FrgmentTransaction.

XML из Fragmenta т.е. frag_a.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> 

и

XML из FragmentB т.е. frag_b.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. замените другой фрагмент из первого фрагмента (FragmentA) на первой вкладке. как ниже код

В 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. что может быть причиной? –

Смежные вопросы