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

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

ClassA mClassAFragment = ???; 

我使用getSupportFragmentManager().findFragmentByTag()试过,我也试着探索mTabHost的能力。没有东西可以得到它们

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

,我试图用这个...

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); 

谁能帮助我?

回答

1

定义活动中的碎片为公开。然后在每个片段中,您还可以参考活动。

在你的活动:

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); 
+0

你能告诉我一个例子吗?假设我们有3个片段.. 标签1 ==> FragmentTab1 标签2 ==> FragmentTab2 标签3 ==> FragmentTab3 在TAB1你有一个EditText上“1号“ 在TAB2你有一个EditText上“数2“ 在表3中应显示两个数字的总和 正如你这样做? – Roldanhollow

+0

我已经更新了我的示例填充textView在片段C与两个其他片段的editText的连接字符串。 – Christian

+0

我试过用 FragmentManager fm = getFragmentManager(); aFragment = fm.findFragmentByTag(“ClassA”); aFragment.mActivity = this; 但不工作.... aFragment是null ...如何初始化他? – Roldanhollow