FragmentTabHost和放大器;片段 - 我如何通过标签之间的数据?放大器、片段、标签、数据

2023-09-05 23:19:31 作者:一脸的美人痣

我有一个MainActivity(FragmentActivity)具有FragmentTabHost。

I have a MainActivity (FragmentActivity) that has a 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);
    }
}

ClassA的,ClassB的和ClassC都是片段(android.support.v4.app.Fragment)。

ClassA, ClassB and ClassC are all Fragments (android.support.v4.app.Fragment).

我需要传递的数据片段(和调用方法)。我怎样才能得到每个片段的参考,像这样的:

I need to pass data (and call methods) on the Fragments. How can I get a reference of each of the Fragments, like this:

ClassA mClassAFragment = ???;

我已经使用getSupportFragmentManager()。findFragmentByTag(尝试),我也试着探索mTabHost的能力。没有什么可以让他们。

I've tried using getSupportFragmentManager().findFragmentByTag() and I've also tried exploring the capabilities of mTabHost. Nothing can get them.

您能否提供一个办法做到这一点或建议另一种方法?

Can you suggest a way to do this or suggest an alternative approach?

推荐答案

OP这里。为了解决这个问题,我已经在超负荷我FragmentActivity的onAttachFragment方式:

OP here. To solve this problem I have overloaded the onAttachFragment method in my FragmentActivity:

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
            ...
        }
    }
}