2014-10-02 4 views
1

enter image description hereВкладка ошибка фрагмента происходит и фрагмент родительской активность была разрушена

Ошибка возникает при переходе от одной вкладки к другой, главный фрагмент активность была разрушена.

Мой фрагмент ребенок Profile_album_details код:

case R.id.ib_photo_delete: 
     String stringiq = ""; 
     NewTask.iq = new CustomIQ("<albummanagement xmlns='naseebalbum'   action='deletepicture'><albumname>"+album.getAlbum_name()+"</albumname><picturetitle>"+picture.getTitle()+"</picturetitle></albummanagement>"); 
     NewTask.iq.setType(IQ.Type.SET); 
     new NewTask(context).execute(); 
     while(NewTask.connection.isAuthenticated() == false){} 
     Profile_album_details.pictures.remove(imageno); 
     Profile_display_photo.pictures = Profile_album_details.pictures; 
     new MainActivity().updateTab(new Profile_album_details(), R.id.tab2,true); 

Основной класс активности родительского фрагмента:

public void updateTab(Fragment frg, 
      int place_holder, boolean addTobackStack) 
    { 
     // TODO Auto-generated method stub 
     FragmentTransaction ft=getFragmentManager().beginTransaction(); 

     ft.replace(place_holder, frg); 
//  ft.setTransition(transaction); 

     if(addTobackStack) 
      ft.addToBackStack(null); 
      ft.commit(); 
    } 



> 10-02 15:25:55.061: E/AndroidRuntime(1920): FATAL EXCEPTION: main 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): java.lang.IllegalStateException: Activity has been destroyed 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1333) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at android.app.BackStackRecord.commitInternal(BackStackRecord.java:595) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at android.app.BackStackRecord.commit(BackStackRecord.java:574) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at com.example.tabs.MainActivity.updateTab(MainActivity.java:166) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at com.example.tabs.MainActivity.launchNewFragment(MainActivity.java:175) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at adapters.Profile_display_photo.onClick(Profile_display_photo.java:164) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at android.view.View.performClick(View.java:4240) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at android.view.View$PerformClick.run(View.java:17721) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at android.os.Handler.handleCallback(Handler.java:730) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at android.os.Handler.dispatchMessage(Handler.java:92) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at android.os.Looper.loop(Looper.java:137) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at android.app.ActivityThread.main(ActivityThread.java:5103) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at java.lang.reflect.Method.invokeNative(Native Method) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at java.lang.reflect.Method.invoke(Method.java:525) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
>  10-02 15:25:55.061: E/AndroidRuntime(1920): at dalvik.system.NativeStart.main(Native Method) 
+0

Возможно, это глупый вопрос, но вы фактически уничтожаете/завершаете действие самостоятельно? – momo

+0

фрагментация была уничтожена после фрагмента trtrststinin.commit() –

ответ

0

Я думаю, я понимаю вопрос сейчас. FragmentTransaction.commit() не выполняется немедленно, между тем, когда вызывается метод, и когда выполняется фактическое совершение транзакции, существует задержка. Вот почему, когда вы вызываете FragmentTransaction.commit(), а затем finish()Activity, вы получаете эту ошибку, так как Activity уничтожается до совершения транзакции.

Во избежание использования FragmentManager.executePendingTransactions(). Это должно, как следует из названия, немедленно выполнить все незавершенные транзакции. Не видя весь ваш код, я бы догадался, что лучшее место перед вызовом Activity.finish(), но если это не работает, попробуйте после commit()

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