2014-10-02 116 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()