2012-01-25 1 views
1

내 앱이 간단합니다.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()

답변

1

좋은 소식, 중첩 조각은 지금 젤리 빈의 supported 및 최신 지원 패키지

+0

그래, 나는 알고 있었지만 여기서 언급하는 것을 잊었다. 귀하의 의견을 보내 주셔서 감사합니다. –

0

R.id.main_contents을이야하는 새 트랜잭션을 만들려고 할 때 발생합니다. 조금 더 검색 한 결과, 다음과 같이 나타났습니다. Error swapping/adding an XML Fragment

inflate의 마지막 매개 변수를 false로 설정하면되었습니다. 내 잘못이야.

편집 : 아직 실제로 더 나은 대안을 찾고 있습니다. 나는 더 이상 사용되지 않는 TabActivity를 사용하고 있습니다. Fragments API를 사용하고 싶지만 필요한 작업을 수행 할 수 없습니다.

+0

그래서 중첩되는 조각 괜찮아? 안드로이드 워드 프로세서가 아니라고 말하는 것은 아니지만 stackoverflow에 대한 합의는 문제를 야기한다는 것입니다. 작업 표시 줄에 탭 (단편으로 정의되어야 함)을 추가하고 있습니다. 각 탭에는 여러 개의보기가 있으며 조각으로 잘 정의 될 수 있지만 컨테이너는 단편이기도합니다. Fragments를 중첩 할 수 없으면 그 유용성은 심각하게 제한됩니다. – Pedro

+0

괜찮지 않습니다. 내 앱 레이아웃은 악몽입니다! 단편화 된 중첩을 피하기 위해 폐기 된 TabActivity를 사용해야했습니다. 나는 도킹에있는 4 개의 버튼이있는 메인 스크린을 가지고있다. (탭 액티비티의 사실 탭 위젯이다.) 첫 번째 탭의 내용 안에는 Fragments를 사용하는 ViewPager가있다.저는 Fragments 프로그래밍 아키텍처가 마음에 들지 않습니다. 왜냐하면 내가 완전히 얻지 못했거나 싫어하기 때문입니다. 어느 쪽이든, Fragments를 중첩하지 마십시오 (모든 트랜잭션에서 충돌이 발생할 수 있습니다). –

관련 문제