내 앱이 간단합니다.Fragments를 Fragments로 중첩하지 않고 더 이상 사용되지 않는 TabActivity를 대체하는 방법은 무엇입니까?
앱이 시작되면 아이콘 A가 활성화되고 그 내용이 화면에 표시됩니다. A, B, C, D 아이콘이있는 아래쪽에 일종의 도크가있는 주요 활동이 있습니다. A의 내용은 가로로 스 와이프하여 변경할 수있는 3 개의 화면이 포함 된 ViewPager입니다.
그래서 내 주요 활동은 "content"framelayout 및 "dock"조각이있는 FragmentActivity입니다. 따라서 framelayout은 뷰 페이지와 함께 확장됩니다.
문제는 내 ViewPager에 3 개의 조각이 포함되어 있습니다. 따라서이 3 개의 Fragment는 내용 Fragment에 중첩됩니다. 콘텐츠 파편 (예 : ViewPager)을 다른 Fragment (대체로 사용자가 Dock의 아이콘 B를 클릭했다고 가정)로 바꾸려고하면 안드로이드가 중첩 된 단편을 지원하지 않기 때문에 충돌이 발생합니다.
주 활동을 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가 붙여 보자
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.main_contents, new HomeFragment());
ft.commit();
: XML에서 더 많은 코드
을 내 주요 활동에서 onCreate에서 FrameLayout이
이
ViewPager는 XML에 구현되어 있지는 않지만 프로그래밍 방식으로 Fra에 추가됩니다. meLayout.
충돌이 나는 .replace()
가 미안 해요 new SurvivalFragment()
그래, 나는 알고 있었지만 여기서 언급하는 것을 잊었다. 귀하의 의견을 보내 주셔서 감사합니다. –