2013-07-22 2 views
2

У меня есть 3 фрагмента фрагментов, фрагмент1, фрагмент2 и фрагмент3. Я создал еще один фрагмент фрагмента в фрагменте2. Проблема заключается в том, что всякий раз, когда я повторно выбираю фрагмент2, содержащий вкладки с фрагментами, мое приложение выходит из строя с помощью LOGCAT, показанного ниже. Я отвечаю на вопрос в stackoverflow по этой ссылке Getting the error "Java.lang.IllegalStateException Activity has been destroyed" when using tabs with ViewPager, но он тоже не работает. Кроме того, я импортирую правильную библиотеку «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; 
     } 


} 

LogCat:

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.

и я могу видеть поле mChildFragmentManager в Fragment2.

Если вы уверены, что это поле объявлен в суперкласса, вы должны использовать Fragment2.class.getField

+0

попробуйте заменить Fragment2.class.getDeclaredField ("mChildFragmentManager"); по Fragment2.class.getField ("mChildFragmentManager"); – kvh

+0

извините, попробуйте getField – kvh

+0

У меня есть ошибка в моем логарифме. hmm, любое обходное решение? –

0

Попробуйте для childFragmentManager

childeFragmentManager = getChildFragmentManager().

Она была добавлена ​​поддержка после выпуска 4.2, поскольку вложенные фрагменты не поддерживались до этого.

Источник http://developer.android.com/about/versions/android-4.2.html#NestedFragments

+0

Извините, могу я знать, где я должен это поставить? –

+0

Извините, вы внесли свой вопрос. В вашем последнем редактировании вы использовали отражение ('Поле') для поиска' FragmentManager' в 'onDetach()'. Поэтому вместо этого используйте это. Я не знаю, как вы добавляете дочерний фрагмент внутри вашего фрагмента. Но не используйте 'getFragmentManager()' для добавления фрагмента внутри вашего фрагмента, вместо этого используйте 'getChildFragmentManager()'. – vKashyap

 Смежные вопросы

  • Нет связанных вопросов^_^