创建片段并将其放到TabHost?

时间:2016-03-23 12:13:25

标签: android android-fragments

我在FragmentActivity中添加了 FragmentTabHost - mTab​​Host 标签:

mTabHost.addTab(mTabHost.newTabSpec("visit").setIndicator("Visit"), VisitTabFragment.class, bundle);

但我需要引用我的TabFragment。我找到了一个部分解决方案,我可以设置我的

@Override
public void onAttachFragment(Fragment fragment) {
        super.onAttachFragment(fragment);

        if (fragment instanceof VisitTabFragment)
            visitTabFragment = (VisitTabFragment) fragment;
...
}

但仅当我点击我的标签时它才有效。我也试过了:

getSupportFragmentManager().findFragmentByTag(tag);

但它给了我NullPointerException(可能它还不存在)。

有没有办法先创建片段,然后将其添加到tabhost?

1 个答案:

答案 0 :(得分:0)

您应该在向其添加标签之前设置您的tabhost:

mTabHost.setup(this, getSupportFragmentManager(), R.id.tabContent);

供参考,可以使用 sinleton模式

public class VisitTabFragment extends Fragment {
      private static VisitTabFragment uniqInstance;

      private VisitTabFragment() {
      }

      public static VisitTabFragment getInstance() {
        if (uniqInstance == null) {
          uniqInstance = new VisitTabFragment();
        }
        return uniqInstance;
      }
      .........
}

如果您想访问您的片段,请致电:

VisitTabFragment.getInstance();

在您的情况下致电:

mTabHost.addTab(mTabHost.newTabSpec("visit").setIndicator("Visit"), VisitTabFragment.getInstance().getClass(), bundle);