我有一个具有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).
我需要在Fragments上传递数据(和调用方法)。我如何获得每个片段的引用,如下所示:
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);
有人帮我吗?
最佳答案
将活动中的片段定义为公共。然后,在每个片段中,您还引用活动。
在您的活动中:
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);