탭이있는 Android 앱이 있습니다. 탭에서 벗어나면 OnDestroy가 해당 단편을 호출 한 것을 볼 수 있습니다. 내가 그 탭으로 돌아 왔을 때, OnCreate가 동일한 절편 객체를 호출하는 것을 볼 것입니다. 그것은 분명히 같은 객체이며, 같은 클래스의 다른 인스턴스는 아닙니다. 다른 탭으로 전환하면 OnDestroy가 다시 호출되고 그 탭으로 돌아 가면 OnCreate에 대한 세 번째 호출이 이어집니다.Android 조각 - 다른 탭으로 전환 할 때 OnDestroy가 호출되고 탭으로 돌아갈 때 OnCreate가 호출됩니까?
Android docs에 이런 일이 있어서는 안됩니다.
이것은 내 응용 프로그램의 아키텍처 문제를 나타내는 것입니까? 관련성이있는 경우 Mono를 사용하고 OnActivityCreated에서 RetainInstance를 true로 설정합니다.
EDIT : 아래 코드는 모든 탭을 감싸는 활동의 코드입니다. 이 때문에 조각을 교체하기위한 당신이 하나 개의 레이아웃 (Resource.Id.fragmentContainer
)를 사용하는 것을 볼 수대로 조각마다 교체되기 때문에
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);
}
탭 전환이 발생하는 코드를 게시 할 수 있습니까? –