我在片段中有一个 FragmentTabHost。我有 4 个标签。当我单击选项卡时,即使我使用片段事务隐藏它,也会触发选项卡的 onCreateView?
我调试并发现当我从主页选项卡单击创建选项卡时
CreateFragment createFragment = (CreateFragment) fm.findFragmentByTag(CREATE_TAG);
即使我在 tabHost.addTab 中添加了它也为空?
如何在选项卡之间移动而不调用每个片段的 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;
}
}