Я пытаюсь настроить фрагмент диалога, который появляется, когда пользователь андроида получает 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);
}
, где Вы добавляете первый диалог? Кроме того, используйте только метод android.support.v4.app.Fragment и getSupportFragmentManager(). –