Во-первых, некоторая справочная информация. У меня есть Activity
, на котором размещается несколько Fragment
s; они скрыты и показаны таким образом, что одновременно отображается только один Fragment
. В каждом Fragment
есть несколько настраиваемых View
s, которые я вызываю IncrementCounter
. Эти представления отображают число и увеличивают это число на 1 при нажатии.Сохранение пользовательского вида внутри фрагмента
Каждый из Fragment
s имеет setRetainInstance(true)
, когда он был создан в моем Activity
. Когда создается Activity
, я проверяю, существуют ли Fragment
s; если они это сделают, я храню ссылку на них; если нет, то я создаю новый экземпляр, как это:
autonFragment = (AutonomousScoutingFragment) getFragmentManager()
.findFragmentByTag("auton");
teleopFragment = (TeleoperatedScoutingFragment) getFragmentManager()
.findFragmentByTag("teleop");
postMatchFragment = (PostMatchScoutingFragment) getFragmentManager()
.findFragmentByTag("post_match");
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
if (autonFragment == null) {
Log.d("onCreate", "autonFragment is null!");
autonFragment = new AutonomousScoutingFragment();
autonFragment.setRetainInstance(true);
ft.add(R.id.scouting_fragment_container, autonFragment, "auton")
.hide(autonFragment);
}
if (teleopFragment == null) {
Log.d("onCreate", "teleopFragment is null!");
teleopFragment = new TeleoperatedScoutingFragment();
teleopFragment.setRetainInstance(true);
ft.add(R.id.scouting_fragment_container, teleopFragment, "teleop")
.hide(teleopFragment);
}
if (postMatchFragment == null) {
Log.d("onCreate", "postMatchFragment is null!");
postMatchFragment = new PostMatchScoutingFragment();
postMatchFragment.setRetainInstance(true);
ft.add(R.id.scouting_fragment_container, postMatchFragment,
"post_match").hide(postMatchFragment);
}
ft.commit();
Одна проблема, у меня есть то, что после каждого изменения ориентации, кажется, как будто Fragment
s не фактически сохраняется, как всегда время я вижу отладки печатает, что все они равны нулю. Это может быть связано с моей большой проблемой; Я не уверен.
Я пытаюсь выяснить, как сохранить значение числа, хранящегося в каждом IncrementCounter
, в результате изменения конфигурации, в частности, вращения. Я переопределил onSaveInstanceState()
и onRestoreInstanceState()
в IncrementCounter
. Когда я поворачиваю свое устройство, я вижу, что onSaveInstanceState()
вызывается на всех IncrementCounter
s у меня есть в моих Fragment
s. Однако соответствующий onRestoreInstanceState()
никогда не вызывается, а мои IncrementCounter
s не восстанавливают свои состояния. Каков правильный способ справиться с чем-то подобным? Я несколько часов стучал головой о стол, чтобы справиться с этой проблемой.
Спасибо, но одна из моих проблем заключается в том, что фрагменты, по-видимому, не выживают при изменении конфигурации. Правильно ли я делаю это для восстановления своей деятельности? –