2

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

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 都是 Fragment(android.support.v4.app.Fragment).

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

ClassA mClassAFragment = ???;

我尝试过使用getSupportFragmentManager().findFragmentByTag(),也尝试过探索 mTab​​Host 的功能。没有什么能得到它们。

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

我试过用这个......

Bundle arguments = new Bundle();
arguments.putString("some id string", "your data");
YourFragment fragment = new YourFragment();
fragment.setArguments(arguments);
getSupportFragmentManager().beginTransaction().add(R.id.fragmentid, fragment).commit();

R.id.fragmentid但是如果我的添加标签很好,我不知道如何使用它:

mTabHost.addTab(mTabHost.newTabSpec("classA").setIndicator("Class A"),
                ClassA.class, null);

有人帮我吗?

4

1 回答 1

1

将 Activity 中的 Fragments 定义为 public。然后在每个 Fragment 中,您还引用了 Activity。

在您的活动中:

public ClassAFragment aFragment;
...
// during initialization:
aFragment = new ClassAFragment();
// or you get it from your TabHost
FragmentManager fm = getFragmentManager();
aFragment = fm.findFragmentByTag("ClassA");
aFragment.mActivity = this;
// same with B and C

在你的片段中:

public MainActivity mActivity;
...
// in Fragment C
String newText = mActivity.aFragment.editText.getText().toString() + mActivity.bFragment.editText.getText().toString();
textView.setText(newText); 
于 2013-07-30T20:32:28.290 回答