2016-07-11 4 views
-1

У меня проблема с заменой фрагментов в android.Выбранный фрагмент макета не показан

Оба моих макета фрагмента размещены в FrameLayout.

И я попытался заменить два фрагмента, используя этот код:

Fragment newFragment = new StatisticsFragment(); 
     FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

     transaction.replace(((ViewGroup)(getView().getParent())).getId(), newFragment); 
     transaction.addToBackStack(null); 

     // Commit the transaction 
     transaction.commit(); 

Проблема заключается в том, что после замены фрагмента, его расположение не отображается, хотя его OncreateView называется.

Пожалуйста, помогите мне.

РЕДАКТОР: Я положил код отверстия.


Я решил проблему, добавив цвет фона в мои макеты.


ответ

1

Это, как я заменить frameLayouts с фрагментами:

fm = getSupportFragmentManager(); 
Fragment_Main main = new Fragment_Main(); 

fm.beginTransaction().replace(R.id.mainContainer, main).commit(); 

Попробуйте добавить .commit до окончания заявление

+0

что R.id.mainContainer? @kurlicue – user63835

+0

Это замена FrameLayout, это равнозначно вашему '((ViewGroup) (getView(). getParent())). getId()'. Но это не сработало? –

+0

Именование ваших переменных, таких как 'Fragment_Main', не является такой хорошей практикой. Прочитайте это: https://source.android.com/source/code-style.html –

0

Этот метод позволяет загрузить любой фрагмент на любой FrameLayout:

/** 
* Function to load a fragment into a inner FrameLayout of auction precap view 
* @param Fragment to load 
* @param If of the container to load fragments to 
*/ 
private void loadInnerFragment(Fragment fragment, int containerId) { 
    try { 
     FragmentManager childFragmentManager = getChildFragmentManager(); 
     FragmentTransaction transaction2 = childFragmentManager.beginTransaction(); 
     transaction2.replace(containerId, fragment); 
     transaction2.commit(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Таким образом, просто выполните:

Fragment newFragment = new StatisticsFragment(); 
     loadInnerFragment(
       newFragment, 
       R.id.container 
     ); 

Где R.id.container это идентификатор вашего FrameLayout

+0

Не могли бы вы объяснить разницу, пожалуйста? –

+0

@Kurlicue Извините, разница между чем? :) –

+1

Ваш подход и обычный способ (без создания mehod), это просто уловить возможное исключение? –

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