У меня есть приложение для Android с вкладками. Когда я переключаюсь с вкладки, я вижу, что OnDestroy вызвал соответствующий фрагмент. Когда я вернусь на эту вкладку, я увижу, что OnCreate вызвал ТО ЖЕ САМОГО ФРАГМЕНТА. Это, безусловно, тот же объект, а не другой экземпляр того же класса. Если я переключусь на другую вкладку, OnDestroy вызывается снова, а затем третий вызов OnCreate, если я вернусь на эту вкладку и так далее.Фрагмент Android - OnDestroy вызывается при переключении на другую вкладку, а затем OnCreate при возврате на вкладку?
Android docs, похоже, заявили, что этого не должно произойти.
Означает ли это архитектурную проблему с моим приложением? Если это актуально, я использую Mono, и я устанавливаю RetainInstance в true в OnActivityCreated.
EDIT: приведенный ниже код относится к деятельности, которая охватывает все вкладки.
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
MainContext mainContext = MainContext;
TabContext tabContext = mainContext.TabContext;
// Tab is a custom model object; not related to Android tabs.
List<Tab> tabs = tabContext.Tabs;
foreach (Tab tab in tabs) {
string displayString = tab.DisplayString;
string withUnderscores = displayString.Replace(' ', '_');
Type fragmentType = Type.GetType(Assembly.GetExecutingAssembly().GetName().Name + "." + withUnderscores + "Fragment");
this.AddTab(tab, (Fragment) Activator.CreateInstance(fragmentType));
}
ActionBar bar = this.ActionBar;
bar.NavigationMode = ActionBarNavigationMode.Tabs;
bar.SetDisplayShowTitleEnabled(false);
bar.SetDisplayShowHomeEnabled(false);
SetContentView(Resource.Layout.MainTabActivityLayout);
if (bundle != null) {
int index = bundle.GetInt("index");
ActionBar.SetSelectedNavigationItem(index);
}
}
private void AddTab(Tab tab, Fragment fragment) {
ActionBar bar = this.ActionBar;
Android.App.ActionBar.Tab droidTab = bar.NewTab();
droidTab.SetTag(tab.ToString());
// omitting code that sets icon and display text.
droidTab.TabSelected += (sender, e) => {
e.FragmentTransaction.Replace(Resource.Id.fragmentContainer, fragment, tab.ToString());
};
this.ActionBar.AddTab(droidTab);
}
Можете ли вы разместить код, где происходит переключение вкладок –