2014-12-02 3 views
1

Я пытаюсь настроить фрагмент диалога, который появляется, когда пользователь андроида получает push-уведомление. Код, который у меня ниже, вызывает диалог. Проблема, с которой я сталкиваюсь, заключается в том, что если мои пользователи получают несколько нажатий, они будут видеть всплывающие окна с несколькими окнами.Показывать только один DialogFragment

Мое желаемое действие состоит в том, чтобы показать только одно диалоговое окно, и если другой будет всплывать до того, как текущий будет закрыт, текущий должен быть уничтожен, а затем показан новый.

public abstract class BaseActivity extends ActionBarActivity { 
    public void showShiftsDialog(String time) { 
     String DIALOG_ALERT = "dialog_alert"; 

     FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
     android.app.Fragment prev = getFragmentManager().findFragmentByTag(DIALOG_ALERT); 

     if (prev != null) transaction.remove(prev); 
     transaction.addToBackStack(null); 

     // create and show the dialog 
     DialogFragment newFragment = ShiftsDialogFragment.newInstance(time); 
     newFragment.show(getSupportFragmentManager().beginTransaction(), DIALOG_ALERT); 
    } 
} 

Я попытался с помощью кода из андроида документации (http://developer.android.com/reference/android/app/DialogFragment.html). При отладке он выглядит так: prev всегда имеет значение null.

В моем понимании, это выглядит, как я крепление DialogFragment к SupportFragmentManager:

newFragment.show(getSupportFragmentManager().beginTransaction(), DIALOG_ALERT); 

и когда я пытаюсь проверить, есть ли ток DialogFragment, я проверяю из FragmentManager:

android.app.Fragment prev = getFragmentManager().findFragmentByTag(DIALOG_ALERT); 

Если я пытаюсь изменить код, чтобы попытаться получить его от SupportFragmentManager, я получаю несовместимый тип ошибки, где он ожидает android.app.Fragment, но я возвращающая android.support.v4.app.Fragment:

android.app.Fragment prev = getSupportFragmentManager().findFragmentByTag(DIALOG_ALERT); 

Как я могу управлять своим DialogFragment так, чтобы в любой момент показывался только один?

Рабочий раствор

public void showShiftsDialog(String time) { 
    String DIALOG_ALERT = "dialog_alert"; 

    android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    android.support.v4.app.Fragment prev = getSupportFragmentManager().findFragmentByTag(DIALOG_ALERT); 

    if (prev != null){ 
     DialogFragment df = (DialogFragment) prev; 
     df.dismiss(); 
     transaction.remove(prev); 
    } 

    transaction.addToBackStack(null); 

    // create and show the dialog 
    DialogFragment newFragment = ShiftsDialogFragment.newInstance(time); 
    newFragment.show(getSupportFragmentManager().beginTransaction(), DIALOG_ALERT); 
} 
+0

, где Вы добавляете первый диалог? Кроме того, используйте только метод android.support.v4.app.Fragment и getSupportFragmentManager(). –

ответ

3

Ваш вопрос, кажется, несовместимость DialogFragment. Если ShiftsDialogFragment является подкласс android.support.v4.app.DialogFragment вы можете использовать

android.support.v4.app.Fragment prev = getSupportFragmentManager().findFragmentByTag(DIALOG_ALERT); 
+0

Удивительно, это устранило ошибку, и кажется, что 'prev' больше не равно null, когда открывается диалог. Однако он не закрывает диалог. Знаете ли вы, как я могу закрыть диалог? – Huy

+0

Ничего, я понял. Добавлю свое решение. – Huy