Об изменении конфигурации я делаю это в моем FragmentActivity onSaveInstanceState:Как восстановить (Sherlock) FragmentActivity к нераспределенной фрагмента после изменения ориентации
getSupportFragmentManager().putFragment(outState,"fred",fred);
где Фреда мой setRetainInstance (истина), фрагмент.
Тогда в моем FragmentActivity onRestoreInstanceState я это делаю:
fred = getSupportFragmentManager().getFragment(inState,"fred");
согласно рекомендаций в этом вопросе: When to use FragmentManager::putFragment and getFragment
где Фреда определен глобально, как это:
android.support.v4.app.Fragment fred=null;
Я хочу вызовите метод в fred из другого метода в моей FragmentActivity (т. е. не из onRestoreInstanceState), который мне нравится:
((fred) fred).somemethod();
, который отлично работает перед изменением ориентации. Однако после изменения ориентации я сталкиваюсь с classCastExceptions, в которых упоминаются другие фрагменты внутри моей FragmentActivity (harry, bert и т. Д.). Причина этих ошибок заключается, вероятно, в том, что Fragment Manager был использован для прикрепления/отсоединения фрагментов harry и bert ПОСЛЕ onRestoreInstanceState.
Я подтвердил, что мой фрагмент fred фактически сохранен (я пишу из него сообщения журнала отладки). Я абсолютно уверен, что моя проблема в том, что мне просто нужно, чтобы сделать некоторые называют фрагмент менеджера, как это:
fred fragment = (fred) getSupportFragmentManager().findFragmentByTag("fred");
непосредственно перед вызовом метода в Фреде. Однако все, что я пытаюсь, просто возвращает null.
Я работаю над этим в течение длительного времени, и любые предложения или возможные направления запроса будут очень желанными.
Обновление: я не реализовал принятое решение точно, но он заставило меня понять, что мне нужно было создать экземпляр fred, даже если это сохранившийся фрагмент. то есть то, что я на самом деле решить это, чтобы выполнить мой вызов метода, как это:
fred fragment = (fred) getSupportFragmentManager().findFragmentByTag("fred");
if (fragment==null){
fragment = new fred(); //this is what I had been missing
}
((fred) fred).somemethod();
вы фрагмент Фреда создан в коде (fragmentTransaction) Do или находится в xml-макете? – koso
В настоящее время это код, но я также попробовал xml. – IanB