Как показать DialogFragment из фрагмента без нулевых указателей, поскольку фрагмент не привязан к активности? - PullRequest
0 голосов
/ 25 октября 2018

У меня проблема с отображением DialogFragment внутри Fragment.Неважно, что я пытаюсь, я не могу заставить его работать каждый раз.

Мой макет состоит из действия с блоком навигации и внутреннего действия, я показываю фрагменты.На этих фрагментах я должен показать DialogFragment, но для этого я должен получить контекст / контекст приложения / активность / что угодно (зависит от текущего года и погоды), чтобы показать его.

В большинстве случаев это работает нормально, но иногда, дажеесли фрагмент постоянно показывается пользователю (без изменений конфигурации или чего-либо еще), иногда случается, что фрагмент не прикреплен.Я получаю эту ошибку и в производстве, так что это не только мое устройство.

Хорошей практикой для этого будет проверка с помощью метода isAdded (), и если действие не присоединено, то ничего не делайте.Я не уверен, почему это хорошая практика, потому что пользователи не будут счастливы, если потеряют свою работу, так как «диалог сохранения» не будет отображаться только потому, что Google дает хорошие практики как ужасные!

Пока что у меня естьэто (среди миллионов комбинаций) внутри моего фрагмента:

private void showStoreDialog() {
    if (someConditionIsOk) {
        StringBuilder sb = new StringBuilder();
        sb.append(getString(R.string.someText));
        sb.append(MINIMUM_LENGTH);
        sb.append(getString(R.string.someText2));

        Toast.makeText(getActivity(), sb.toString(), Toast.LENGTH_LONG).show();
        return;
    }
    ...

В этой строке происходит исключение: sb.append (getString (R.string.someText));

Cause: android.support.v4.app.Fragment.requireContext (Fragment.java:614)   
android.support.v4.app.Fragment.getResources (Fragment.java:678)
android.support.v4.app.Fragment.getString (Fragment.java:700)
solutions.lunalabs.gpsracer.fragments.RecordingFragment.showStoreDialoglog (RecordingFragment.java:152)

Я знаюЯ мог бы решить эту проблему путем маршрутизации через действия с обратными вызовами, но я не хочу этого, потому что я должен направлять все диалоги через действия, даже если это необходимо только в одном фрагменте.Есть ли безопасное решение для этого?

Спасибо!

...