发生制表符片段错误,片段父活动已被破坏

时间:2014-10-02 10:37:33

标签: java android android-fragments

enter image description here

从一个标签切换到另一个标签时发生错误,主片段活动已被销毁。

我的片段child 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)

1 个答案:

答案 0 :(得分:0)

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

要避免使用此FragmentManager.executePendingTransactions()。如名称所示,这应该立即执行所有待处理的事务。在没有看到您的整个代码的情况下,我猜最好的位置是在Activity.finish()调用之前,但如果这不起作用,请尝试commit()