2015-06-08 4 views
1

У меня есть активность с традиционным компонентом viewpager. Этот viewpager содержит MainFragment класс (это стандартный фрагмент). Это расположение этого фрагмента:Фрагмент не отображается должным образом в ViewPager

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1"> 
</FrameLayout> 

PS: мне нужно использовать эту framelayout, потому что может переключаться с 2 фрагментами внутри по пользовательским данным.

В этом MainFragment Я хочу, чтобы показать конкретный фрагмент в соответствии с данными пользователя:

@Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     final Bundle bundle = getArguments(); 
     int mydata = bundle.getInt(BUNDLE_KEY_MY_DATA); 

     if (mydata == 1) 
      addFragment(Fragment1.newInstance(), Fragment1.TAG); 
     else if (mydata == 2) 
      addFragment(Fragment2.newInstance(), Fragment2.TAG); 
    } 

Мой addFragment метод:

protected void addFragment(@NonNull Fragment fragment, 
          @NonNull String fragmentTag) { 
    getFragmentManager() 
      .beginTransaction() 
      .add(R.id.fragment_container, fragment, fragmentTag) 
      .disallowAddToBackStack() 
      .commit(); 
} 

Но есть странное поведение во время исполнения (без падений!). Например, на моей вкладке (связанной с viewpager) есть следующие элементы: «1» «2» «3» «4» «5» «6» «7»

Таким образом, позиция по умолчанию находится на элементе «4 «; он работает отлично. Теперь, если я прокручиваю, например, до «3», Fragment1 (или Fragment2 не имеет значения) не появляется. Чтобы показать это, я должен снова проведите пальцем (так до «2»), затем вернитесь к «3», и фрагмент появится правильно.

Спасибо за помощь, ребята!

+0

Вы * * осведомлены о том, что 'ViewPager' предварительно создает невидимые фрагменты (до значения, предоставленного' setOffscreenPageLimit() ') слева и справа от текущей страницы, и ваши пользовательские данные уже правильно настроиться, когда это предварительное создание происходит? – dhke

ответ

3

Используйте Fragment.getChildFragmentManager() в своем addFragment().

+0

Спасибо, отлично! – anthony

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