Ток, у меня есть 2 Fragments
, который может переключаться через вкладку ActionBar
.
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab newTab = getSupportActionBar().newTab();
newTab.setText("history");
newTab.setTabListener(new TabListenerHistoryFragment>(this, "history",
HistoryFragment.class));
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// Check if the fragment is already initialized
if (mFragment == null) {
// If not, instantiate and add it to the activity
mFragment = Fragment.instantiate(mActivity, mClass.getName());
mFragment.setRetainInstance(true);
ft.add(android.R.id.content, mFragment, mTag);
} else {
// If it exists, simply attach it in order to show it
ft.attach(mFragment);
}
}
Я понимаю, что в первый раз, когда мой Activity
(эта активность содержит 2 фрагмента) запускается, методы Fragment
s 'будут вызываться в следующей последовательности.
onCreate -> onCreateView -> onStart
Когда я выполняю переключение Tab, а затем Tab переключается обратно на тот же фрагмент, снова будут вызваны следующие методы.
onCreateView -> onStart
Я просто хочу сохранить одно и то же состояние представления GUI, когда Tab снова переключается.
- Я хочу, чтобы мой график продолжал увеличиваться до предыдущего уровня.
- Я хочу, чтобы мой график горизонтального прокрутки оставался на прежнем уровне.
- Я хочу, чтобы мой список продолжал прокрутку на предыдущем уровне.
- ...
Я знаю, что я могу сохранять/восстанавливать простые переменные, используя следующий метод при переключении Tab
Но это не то, чего я хочу, так как мое состояние GUI довольно сложно описать в целом связке примитивных значений.
Я пробую следующий подход. Конечно, это не сработает, так как я получаю следующую ошибку времени выполнения.
public class HistoryFragment extends Fragment {
View view = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (this.view != null) {
return this.view;
}
this.view = inflater.inflate(R.layout.history_activity, container, false);
}
}
java.lang.IllegalStateException: указанный дочерний элемент уже имеет родителя. Сначала вы должны вызвать removeView() для родительского родителя.
Я понимаю, что следующий демонстрационный пример может сохранить состояние своего фрагмента GUI (например, положение вертикальной прокрутки списка) при переключении Tab. Но я думаю, возможно, это потому, что они используют ListFragment? Поскольку я не считаю, что они выполняют какую-либо специальную обработку для сохранения состояния GUI.
- com.example.android.apis.app.FragmentTabs
- com.example.android.apis.app.LoaderCursor.CursorLoaderListFragment
Могу ли я узнать, как я могу избежать воссоздания одного и того же вида при переходе на вкладку?