У меня есть фрагмент внутри фрагмента. Эта настройка работает нормально, пока вы не повернете устройство. После поворота устройства внутренний фрагмент больше не отображается.Фрагмент Transaction show() не показывает фрагмент во второй раз
Я вызываю метод .show(), и у меня есть несколько операторов журналов для отображения того, что происходит, и фрагмент просто не появляется после вращения.
Любая идея о том, что я делаю неправильно?
Вот мой код. Вопрос может быть найден в частном методе displayTab():
public static class MyTabsListener<T extends Fragment> implements ActionBar.TabListener
{
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
private final Bundle mArgs;
private Fragment mFragment;
private FragmentManager fm;
private Fragment fragmentJobListDetails;
private Fragment fragmentTrends;
public MyTabsListener(Activity activity, String tag, Class<T> clz, FragmentManager fragmentManager)
{
this(activity, tag, clz, null,fragmentManager);
}
public MyTabsListener(Activity activity, String tag, Class<T> clz, Bundle args, FragmentManager fragmentManager)
{
mActivity = activity;
mTag = tag;
mClass = clz;
mArgs = args;
fm = fragmentManager;
// Check to see if we already have a fragment for this tab, probably
// from a previously saved state. If so, deactivate it, because our
// initial state is that a tab isn't shown.
mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
if (mFragment != null && !mFragment.isDetached())
{
FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
ft.hide(mFragment);
ft.commit();
}
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft)
{
displayTab(tab, ft);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft)
{
if (mFragment != null)
{
ft.hide(mFragment);
//ft.remove(mFragment);
}
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft)
{
displayTab(tab, ft);
}
private void displayTab(Tab tab, FragmentTransaction ft)
{
fragmentJobListDetails = mActivity.getFragmentManager().findFragmentByTag("jobDetails");
fragmentTrends = mActivity.getFragmentManager().findFragmentByTag("trends");
if (fragmentJobListDetails != null && !fragmentJobListDetails.isDetached())
{
ft.hide(fragmentJobListDetails);
}
if (mFragment == null)
{
mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
ft.add(android.R.id.content, mFragment, mTag);
}
else
{
if (mFragment == fragmentTrends)
{
System.out.println("fragments are equal");
System.out.println("equal. Fragment added? = " + mFragment.isAdded());
System.out.println("equal. Fragment detached? = " + mFragment.isDetached());
System.out.println("equal. Fragment visible? = " + mFragment.isVisible());
ft.show(fragmentTrends);
System.out.println("equal. Fragment added? = " + mFragment.isAdded());
System.out.println("equal. Fragment detached? = " + mFragment.isDetached());
System.out.println("equal. Fragment visible? = " + mFragment.isVisible());
}
ft.show(mFragment);
}
}
}// end MyTabsListener
А вот выход из моих журналов, после вращения:
11-25 09:17:24.895: I/System.out(14605): mFragment = TrendsPagerHolder{427a94a8 #1 id=0x1020002 trends}
11-25 09:17:24.895: I/System.out(14605): fragments are equal
11-25 09:17:24.895: I/System.out(14605): equal. Fragment added? = true
11-25 09:17:24.895: I/System.out(14605): equal. Fragment detached? = false
11-25 09:17:24.895: I/System.out(14605): equal. Fragment visible? = false
11-25 09:17:24.895: I/System.out(14605): equal. Fragment added? = true
11-25 09:17:24.895: I/System.out(14605): equal. Fragment detached? = false
11-25 09:17:24.895: I/System.out(14605): equal. Fragment visible? = false
Спасибо!
При повороте устройства активность перезапускается. Это означает, что ваша функция onCreate вызывается снова! – SeahawksRdaBest
Да, но что это должно сделать? все остальные фрагменты, перечисленные на других вкладках, отображаются, кроме этого – TooManyEduardos
вам нужно устройство, чтобы иметь возможность изменить ориентацию? – SeahawksRdaBest