Мое приложение простое.У меня есть основной вид деятельности с некой док-станцией внизу, с 4 значками: A, B, C, D.
При запуске приложений значок A активен, а его содержимое отображается наэкран.Содержимое A - это ViewPager, содержащий 3 экрана, которые вы можете изменить, проводя по горизонтали.
Таким образом, моя основная деятельность - это FragmentActivity, которая имеет структуру содержимого «frame» и фрагмент «dock».Следовательно, разметка кадра надувается пейджером.
Проблема в том, что мой ViewPager содержит 3 фрагмента.Следовательно, эти 3 фрагмента вкладываются во фрагмент контента.Если я пытаюсь заменить Фрагмент содержимого (т. Е. ViewPager) другим Фрагментом (скажем, пользователь щелкнул значок B в доке), он вылетает, потому что Android не поддерживает вложенные Фрагменты.
Я пытался изменитьосновное действие для TabActivity, так что 3 фрагмента будут вложены в действие вместо фрагмента.Это здорово, это работает.
За исключением того, что TabActivity устарела, и мне рекомендуется использовать ... Фрагменты!
Что здесь можно сделать?
Редактировать: позвольте мневставьте трассировку стека
01-26 00:03:41.167 E/AndroidRuntime(32723): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.view.ViewGroup.addViewInner(ViewGroup.java:3344)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.view.ViewGroup.addView(ViewGroup.java:3215)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.view.ViewGroup.addView(ViewGroup.java:3172)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.view.ViewGroup.addView(ViewGroup.java:3152)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:874)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.os.Handler.handleCallback(Handler.java:605)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.os.Handler.dispatchMessage(Handler.java:92)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.os.Looper.loop(Looper.java:137)
01-26 00:03:41.167 E/AndroidRuntime(32723): at android.app.ActivityThread.main(ActivityThread.java:4340)
01-26 00:03:41.167 E/AndroidRuntime(32723): at java.lang.reflect.Method.invokeNative(Native Method)
01-26 00:03:41.167 E/AndroidRuntime(32723): at java.lang.reflect.Method.invoke(Method.java:511)
01-26 00:03:41.167 E/AndroidRuntime(32723): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-26 00:03:41.167 E/AndroidRuntime(32723): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-26 00:03:41.167 E/AndroidRuntime(32723): at dalvik.system.NativeStart.main(Native Method)
Edit2: больше кода
В XML у меня есть FrameLayout
В моей основной деятельности onCreate:
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.main_contents, new HomeFragment());
ft.commit();
Таким образом, ViewPager не реализован в XML, но программно добавлен в FrameLayout.
Сбой происходит, когда я пытаюсь создать новую транзакцию, которая .replace()
s R.id.main_contents
с new SurvivalFragment()