2012-02-10 5 views
2

создать DialogFragment с помощью этого кода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 простого класса DialogFragment, который создает новый AlertDialog.Builder (..).

Тогда я хочу, чтобы удалить диалог

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', тогда вызывайте 'reject()' в фрагменте диалога, чтобы удалить его. – Varun

ответ

1

Попробуйте использовать transaction.remove(prev).commitAllowingStateLoss().

2

Попробуйте позвонить executePendingTransactions() сразу после commit(). Это заставит транзакцию немедленно выполнить. Вызов 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(); 
     } 
    } 

я думаю, что это поможет вам.

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