FragmentTabHost&Fragments - 如何在标签之间传递数据?

Row*_*man 5 android android-tabhost android-fragments android-fragmentactivity

我有一个MainActivity(FragmentActivity),它有一个FragmentTabHost.

public class FragmentTabs extends FragmentActivity {
    private FragmentTabHost mTabHost;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fragment_tabs);
        mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
        mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

        mTabHost.addTab(mTabHost.newTabSpec("classA").setIndicator("Class A"),
            ClassA.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("classB").setIndicator("Class B"),
            ClassB.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("classC").setIndicator("Class C"),
            ClassC.class, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

ClassA,ClassB和ClassC都是Fragments(android.support.v4.app.Fragment).

我需要在Fragments上传递数据(和调用方法).如何获得每个片段的引用,如下所示:

ClassA mClassAFragment = ???;
Run Code Online (Sandbox Code Playgroud)

我尝试过使用getSupportFragmentManager().findFragmentByTag(),我也试过探索mTabHost的功能.没有什么可以得到他们.

你能建议一种方法来做这个或建议一种替代方法吗?

Row*_*man 11

OP在这里.为了解决这个问题,我在FragmentActivity中重载了onAttachFragment方法:

public class FragmentTabs extends FragmentActivity {
    private FragmentTabHost mTabHost;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
    }

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

    if (fragment.getClass() == ClassA.class) {
        ClassA mClassAFragment = (ClassA)fragment
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 或者intanceof会更好:'片断instanceof ClassA' (2认同)