フラグメントに FragmentTabHost があります。私は4つのタブを持っています。タブをクリックすると、フラグメントトランザクションを使用して非表示にしても、タブの onCreateView がトリガーされますか?
ホームタブから作成タブをクリックすると、デバッグしたところ、
CreateFragment createFragment = (CreateFragment) fm.findFragmentByTag(CREATE_TAG);
tabHost.addTabに追加したのにnull?
各フラグメントの onCreateView を呼び出さずにタブ間を移動するにはどうすればよいですか?
ありがとうございました
これがフラグメントクラスです
public class TabFragment extends Fragment {
public static final String HOME_TAG = "home";
public static final String CREATE_TAG = "create";
public static final String SEARCH_TAG = "search";
public static final String PROFILE_TAG = "profile";
private MyFragmentTabHost tabHost;
private MyFragmentTabHost.TabInfo tabInfo;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.fragment_tab, viewGroup, false);
tabHost = (MyFragmentTabHost) view.findViewById(android.R.id.tabhost);
tabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabcontent);
tabHost.addTab(tabHost.newTabSpec(HOME_TAG).setIndicator(getString(R.string.tab_home)), HomeFragment.class, null);
tabHost.addTab(tabHost.newTabSpec(CREATE_TAG).setIndicator(getString(R.string.tab_create)), CreateFragment.class, null);
tabHost.addTab(tabHost.newTabSpec(SEARCH_TAG).setIndicator(getString(R.string.tab_search)), CreateFragment.class, null);
tabHost.addTab(tabHost.newTabSpec(PROFILE_TAG).setIndicator(getString(R.string.tab_profile)), CreateFragment.class, null);
MyFragmentTabHost.OnTabChangeListener tabListener = new MyFragmentTabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String s) {
FragmentManager fm = getChildFragmentManager();
HomeFragment homeFragment = (HomeFragment) fm.findFragmentByTag(HOME_TAG);
CreateFragment createFragment = (CreateFragment) fm.findFragmentByTag(CREATE_TAG);
FragmentTransaction ft = fm.beginTransaction();
if(s.equalsIgnoreCase(HOME_TAG)){
if(homeFragment == null)
ft.add(R.id.tabcontent, new HomeFragment(), HOME_TAG);
else{
if(createFragment != null)
ft.hide(createFragment);
ft.show(homeFragment);
}
}
else if(s.equalsIgnoreCase(CREATE_TAG)){
if(createFragment == null)
ft.add(R.id.tabcontent, new CreateFragment(), CREATE_TAG);
else{
if(homeFragment != null)
ft.hide(homeFragment);
ft.show(createFragment);
}
}
ft.commit();
}
};
tabHost.setOnTabChangedListener(tabListener);
return view;
}
}