1
FragmnetActivity
에서 연장 된 활동에서 내 응용 프로그램의 탭으로 Fragments
을 사용하고 있습니다. 초기 조각을 추가 할 수 있으며 응용 프로그램 설정에 따라 조각을 바꿉니다. 내가 디버그 모드에있을 때, 나는 매우 새로운 fragmnet의 onCreate
및 다른 overriden
메소드가 두 번 호출된다는 것을 관찰합니다. 왜 그렇게? 어떻게 한 번만 호출되도록 제한 할 수 있습니까? 어떤 도움에 감사드립니다대체 된 조각의 OnCreate를 Twice라고합니다. 왜?
public class FragmentTabs extends FragmentActivity implements OnTabChangeListener {
private FragmentTabHost mTabHost;
private HomeFragment homeFragmnet;
private GroupFragment groupFragment;
private TemplateFragment templateFragment;
private SetingsFragment settingsFragment;
private CalendarViewFragment calendarViewFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.fragment_tabs);
mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
homeFragmnet = new HomeFragment();
groupFragment = new GroupFragment();
templateFragment = new TemplateFragment();
settingsFragment = new SetingsFragment();
calendarViewFragment = new CalendarViewFragment();
mTabHost.setOnTabChangedListener(this);
if (Database.getSharedObject(getApplicationContext()).getAppSettings().getListView() == 1) {
mTabHost.addTab(mTabHost.newTabSpec("home").setIndicator("", getResources().getDrawable(R.drawable.home_tab)), HomeFragment.class, null);
} else {
mTabHost.addTab(mTabHost.newTabSpec("home").setIndicator("", getResources().getDrawable(R.drawable.home_tab)), CalendarViewFragment.class, null);
}
mTabHost.addTab(mTabHost.newTabSpec("groups").setIndicator("", getResources().getDrawable(R.drawable.groups_tab)), GroupFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("templates").setIndicator("", getResources().getDrawable(R.drawable.templates_tab)),TemplateFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("settings").setIndicator("", getResources().getDrawable(R.drawable.settings_tab)), SetingsFragment.class, null);
}
@Override
protected void onResume() {
super.onResume();
}
private void showHomeFragment() {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.realtabcontent, homeFragmnet);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.disallowAddToBackStack();
ft.commit();
}
private void showGroupsFragment() {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.realtabcontent, groupFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.disallowAddToBackStack();
ft.commit();
}
private void showTemplateFragment() {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.realtabcontent, templateFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.disallowAddToBackStack();
ft.commit();
}
private void showSettingsFragment() {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.realtabcontent, settingsFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.disallowAddToBackStack();
ft.commit();
}
private void showCalendarViewFragment() {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.realtabcontent, calendarViewFragment);
ft.disallowAddToBackStack();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
}
@Override
public void onTabChanged(String arg0) {
if (mTabHost.getCurrentTab() == 0) {
if (Database.getSharedObject(getApplicationContext()).getAppSettings().getListView() == 1) {
showHomeFragment();
} else {
showCalendarViewFragment();
}
} else if (mTabHost.getCurrentTab() == 1) {
showGroupsFragment();
} else if (mTabHost.getCurrentTab() == 2) {
showTemplateFragment();
} else if (mTabHost.getCurrentTab() == 3) {
showSettingsFragment();
}
}
:
다음
내가 내 응용 프로그램에서 조각을 사용하고있는 방법입니다. 감사!
@ iForests ... 저는 Action Bar TabListener를 사용하지 않습니다. Support v4에서 사용하고 있습니다. –
여전히 2 번 방법을 호출하고 있습니다. –