2014-10-02 77 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

也许是一个愚蠢的问题,但你真的摧毁/完成自己的活动?在fragmenttranstitoin.commit()后破坏了fragment的活动( – momo 2014-10-02 11:01:31

+0

) – 2014-10-02 12:31:32

回答

0

我想我现在明白这个问题。 FragmentTransaction.commit()不会立即执行,在调用该方法和执行实际事务提交时之间存在延迟。这就是为什么当你调用FragmentTransaction.commit(),然后finish(),Activity时,你会得到该错误,因为Activity在执行事务提交之前被销毁。

为了避免使用FragmentManager.executePendingTransactions()。正如名称所示,它应该立即执行所有未决事务。没有看到你的整个代码,我会猜想最好的地方是在Activity.finish()通话之前,但如果这不起作用,然后尝试在commit()