Фрагмент диалога исчезает при изменении ориентации

У меня есть фрагмент диалога, который отображает представление. Когда я показываю вид, он работает нормально. Хотя, когда я меняю его ориентацию с альбомной/портретной или наоборот, фрагмент диалога исчезает. Я пробовал несколько предложений, хотя ни одно из них не сработало.

Вот сокращенная версия моего фрагмента диалога, я добавил onSaveInstanceState для сохранения состояния и попытался вызвать его в onCreateView. Хотя это не работает. Любые советы, которые помогут решить эту проблему, очень ценятся. Джим

public class BalanceOverlay extends DialogFragment implements View.OnClickListener {



public BalanceOverlay() {
    // Empty constructor is required for DialogFragment
    // Make sure not to add arguments to the constructor
    // Use `newInstance` instead as shown below
}

public static BalanceOverlay newInstance(String title) {
    BalanceOverlay frag = new BalanceOverlay();
    Bundle args = new Bundle();
    args.putString("Balance - The Center of the Plate", title);
    frag.setArguments(args);
    return frag;
}
@Override
public void onDestroyView() {
    if (getDialog() != null && getRetainInstance()) {
        getDialog().setDismissMessage(null);
    }
    super.onDestroyView();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
     bview=  inflater.inflate(R.layout.balance, container);

    //setRetainInstance(true);
    return bview;
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putLong("param", value);
}
@Override
public void onViewCreated(final View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    if (savedInstanceState != null){
        value =  savedInstanceState.getLong("param");
    }

person TeleJim    schedule 03.09.2018    source источник
comment
Как вы представляете DialogFragment?   -  person Darwind    schedule 04.09.2018
comment
Я вызываю этот метод: 'private void showBalanceDialog() { FragmentManager fm = getSupportFragmentManager(); BalanceOverlay balanceOverlay = BalanceOverlay.newInstance(Balance Overlay); balanceOverlay.show(FM, Баланс); }'   -  person TeleJim    schedule 04.09.2018
comment
Похоже, на ваш вопрос есть ответ - см. мою ссылку выше. Похоже, это вызвано проблемой в библиотеке поддержки, и она так и не была исправлена. Вы пытались просто удалить setRetainInstance(true)?   -  person Darwind    schedule 04.09.2018
comment
Я прокомментировал это в своем коде выше, хотя это не сработало. Во время отладки/пошагового выполнения я заметил, что мой метод onSaveInstanceState (Bundle icicle) никогда не вызывается. Поэтому, когда он ищет сохраненное состояние «if (savedInstanceState! = null)», он всегда возвращает ноль. Мой метод 'onSaveInstanceState(Bundle icicle)' находится не в том месте? Как видите, в настоящее время он находится внутри базового класса диалогового фрагмента. Нужно ли помещать его в методы onViewCreated или onCreateView? Нужно ли определять по-другому?   -  person TeleJim    schedule 04.09.2018
comment
setRetainInstance(true) заставит Fragment пережить изменения конфигурации, поэтому onSaveInstanceState не вызывается при повороте экрана. Это может быть вызвано, если вы переместите приложение в фоновый режим, а Android собирает мусор. Вы пробовали ответ, на который я ссылался, где onDestroy переопределяется?   -  person Darwind    schedule 04.09.2018
comment
А, я вижу, вы перекомментировали setRetainInstance(true). onSaveInstanceState никогда не гарантированно вызывается. Возможно, взгляните на этот пост о сохранении и восстановлении состояния экземпляра: inthecheesefactory. com/blog/ Слишком много информации, чтобы уместиться в одном комментарии ;-)   -  person Darwind    schedule 04.09.2018
comment
ссылка была полезна ... сегодня вечером я отменю 'setRetainInstance (true)' и посмотрю, вернет ли он состояние сохранения. Я обновлю пост тем, что найду. спасибо за ответ!   -  person TeleJim    schedule 04.09.2018
comment
Я чувствую, что перепробовал все, и не могу заставить onSaveInstanceState срабатывать. Я открыт для новых предложений, если они у вас есть. Благодарю.   -  person TeleJim    schedule 05.09.2018
comment
Не могли бы вы опубликовать пример проекта где-нибудь, чтобы я мог его попробовать, что вы видите? Я не могу воспроизвести проблему из вашего текущего кода. Кроме того, что вы хотите сохранить в onSaveInstanceState? Многие вещи уже автоматически сохраняются различными виджетами.   -  person Darwind    schedule 05.09.2018
comment
Спасибо, я предоставлю больше информации сегодня вечером. Хотя, чтобы подвести итог, я показываю пользовательскую кнопку, линейный объект и треугольник (с использованием пути) во фрагменте диалога. 3 пользовательских элемента реплицируются несколько раз каждый. Все это работает нормально. Когда я меняю ориентацию, фрагмент диалога исчезает. Во время отладки я заметил, что onSaveinstanceState никогда не вызывался, понимая, что некоторые из них могут быть сохранены автоматически. Кроме того, когда я снова открываю диалоговое окно, оно выглядит совсем не так, как задумано. Извините за мое невежество, кроме здесь, где я могу опубликовать некоторые из этих   -  person TeleJim    schedule 05.09.2018
comment
Вы можете опубликовать проект на Github или Bitbucket или, если у вас мало кода, вы можете создать Github Gist с классами и XML, тогда я разберусь с остальным.   -  person Darwind    schedule 06.09.2018
comment
поищите коп1803е на гитхабе...   -  person TeleJim    schedule 07.09.2018