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(); 
    } 
} 

:

다음

내가 내 응용 프로그램에서 조각을 사용하고있는 방법입니다. 감사!

답변

0

대신 show() 및 hide()를 사용하면 잘 작동합니다.

+0

@ iForests ... 저는 Action Bar TabListener를 사용하지 않습니다. Support v4에서 사용하고 있습니다. –

+0

여전히 2 번 방법을 호출하고 있습니다. –