2013-07-22 4 views
2

3 개의 조각 탭, fragment1, fragment2 및 fragment3이 있습니다. fragment2에 다른 단편 탭을 만들었습니다. 문제는 조각 탭이 포함 된 fragment2를 다시 선택할 때마다 내 응용 프로그램이 아래 표시된 LOGCAT과 충돌합니다. 나는이 링크 Getting the error "Java.lang.IllegalStateException Activity has been destroyed" when using tabs with ViewPager에 stackoverflow에 질문을 따르지만 그것은 작동하지 않는 것 같습니다. 또한 올바른 라이브러리 "import java.lang.reflect.Field;"을 (를) 가져오고 있습니까?FragmentTabHost "작업이 파괴되었습니다."

fragment2.java

import com.actionbarsherlock.app.SherlockFragment; 
import android.os.Bundle; 
import android.support.v4.app.FragmentTabHost; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class Fragment2 extends SherlockFragment{ 
    private FragmentTabHost mTabHost; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 

      mTabHost = new FragmentTabHost(getSherlockActivity()); 
      mTabHost.setup(getSherlockActivity(), getChildFragmentManager(), R.layout.fragmenttab2); 

      mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"), 
        Fragment1.class, null); 
      mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"), 
        Fragment2.class, null); 
      mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"), 
        Fragment3.class, null); 

      return mTabHost; 
     } 

     @Override 
     public void onDestroyView() { 
      super.onDestroyView(); 
      mTabHost = null; 
     } 


} 

로그 캣 :

07-22 16:18:50.668: E/AndroidRuntime(29774): FATAL EXCEPTION: main 
07-22 16:18:50.668: E/AndroidRuntime(29774): java.lang.IllegalStateException: Activity has been destroyed 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1342) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.support.v4.app.FragmentTabHost.onAttachedToWindow(FragmentTabHost.java:278) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.view.View.dispatchAttachedToWindow(View.java:9953) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2198) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2206) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.view.ViewGroup.addViewInner(ViewGroup.java:3376) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.view.ViewGroup.addView(ViewGroup.java:3208) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.view.ViewGroup.addView(ViewGroup.java:3165) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.view.ViewGroup.addView(ViewGroup.java:3145) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:922) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.os.Handler.handleCallback(Handler.java:605) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.os.Looper.loop(Looper.java:137) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at android.app.ActivityThread.main(ActivityThread.java:4507) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at java.lang.reflect.Method.invokeNative(Native Method) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at java.lang.reflect.Method.invoke(Method.java:511) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 
07-22 16:18:50.668: E/AndroidRuntime(29774): at dalvik.system.NativeStart.main(Native Method) 

답변

0

이 코드 작성 :

Field childFragmentManager = Fragment2.class.getDeclaredField("mChildFragmentManager"); 

당신이 당신이 Fragment2에 선언 제기 얻을 완 의미합니다.

그리고 Fragment2의 mChildFragmentManager 필드를 볼 수 있습니다.

당신이 확신하는 경 슈퍼 클래스에 선언 제기, 당신은 Fragment2.class.getField

+0

는 Fragment2.class.getDeclaredField ("mChildFragmentManager")를 대체하려고; Fragment2.class.getField ("mChildFragmentManager")에 의해; – kvh

+0

죄송합니다, getField 시도 – kvh

+0

내 logcat에서 약간의 오류가 발생했습니다. 흠, 어떤 해결 방법? –

0

가 그것은 지원이 추가되었습니다 당신의 childFragmentManager

childeFragmentManager = getChildFragmentManager().

이 시도 사용해야합니다 4.2 릴리스 이후에 라이브러리는 중첩 된 파편으로 지원되지 않았습니다.

소스 http://developer.android.com/about/versions/android-4.2.html#NestedFragments

+0

죄송합니다. 어디에 넣어야할지 모르겠습니까? –

+0

죄송합니다. 질문을 편집하셨습니다. 마지막 편집에서'onDetach()'에서'FragmentManager'를 찾기 위해 리플렉션 ('Field')을 사용하고있었습니다. 그래서 대신에 이것을 사용하십시오. 조각 내에서 하위 조각을 어떻게 추가하는지 모르겠습니다. 그러나 조각 안에 fragment를 추가하기 위해'getFragmentManager()'를 사용하지 말고 대신'getChildFragmentManager()'를 사용하십시오. – vKashyap