2012-02-10 72 views
2

我使用此代碼DialogFragment不會被刪除

Fragment prev = getSupportFragmentManager().findFragmentByTag(DIALOG_SUBMISSIOIN_RESPONSE); 
AlertDialogFragment alert = AlertDialogFragment.newInstance(text, getString(R.string.worklog_alert_ok)); 
alert.show(getSupportFragmentManager(), DIALOG_SUBMISSIOIN_RESPONSE); 

其中AlertDialogFragment是創建新的AlertDialog.Builder(..)一個簡單的DialogFragment類創建DialogFragment。

然後我想刪除的對話框

Fragment prev = getSupportFragmentManager().findFragmentByTag(dialogTag); 
if (prev != null) { 
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     transaction.remove(prev).commit(); 
} 
Log.d(TAG, "dialog removed " + getSupportFragmentManager().findFragmentByTag(dialogTag) + ", isremoving = " + prev.isRemoving()); 

然而,在過去的Log.d消息我還是拿到片段(即getSupportFragmentManager().findFragmentByTag(dialogTag)不爲空,但返回有效的片段)。

如何強制立即刪除對話框?這對我來說很重要,因爲我有在這個函數之後執行的代碼,它檢查對話是否存在,然後什麼也不做,如果不存在,則重新創建它。但是,它不會重新創建它,因爲getSupportFragmentManager().findFragmentByTag(dialogTag)返回有效DialogFragment

我使用Android的兼容性包,Android版本2.2

+1

如果您的'dialog'是'DialogFragment'的擴展名,那麼調用對話框片段上的'dismiss()'以將其刪除。 – Varun 2013-08-20 22:21:55

回答

1

嘗試使用transaction.remove(prev).commitAllowingStateLoss()

2

嘗試在commit()之後立即致電executePendingTransactions()。這將迫使交易立即執行。撥打commit()只會安排將來發生的交易,所以這可能是您遇到的問題。

0

您可以顯示和隱藏片段對話框你的流程,如:

public void showLoadingDialog() { 
     LoadingDialogFragment fragment = (LoadingDialogFragment) getSupportFragmentManager().findFragmentByTag(LoadingDialogFragment.FRAGMENT_TAG); 
     if (fragment == null) { 
     fragment = new LoadingDialogFragment(); 
     fragment.setCancelable(false); 
     getSupportFragmentManager().beginTransaction() 
            .add(fragment, LoadingDialogFragment.FRAGMENT_TAG) 
            .commitAllowingStateLoss(); 

     // fragment.show(getSupportFragmentManager().beginTransaction(), LoadingDialogFragment.FRAGMENT_TAG); 
     } 
    } 

    public void hideLoadingDialog() { 
     LoadingDialogFragment fragment = (LoadingDialogFragment) getSupportFragmentManager().findFragmentByTag(LoadingDialogFragment.FRAGMENT_TAG); 
     if (fragment != null) { 
     // fragment.dismissAllowingStateLoss(); 
     getSupportFragmentManager().beginTransaction().remove(fragment).commitAllowingStateLoss(); 
     } 
    } 

我認爲這會幫助你的。