我有一个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);
}
}
ClassA,ClassB和ClassC都是片段(android.support.v4.app.Fragment)。
我需要在Fragments上传递数据(和调用方法)。如何获得每个片段的引用,如下所示:
ClassA mClassAFragment = ???;
我尝试过使用getSupportFragmentManager()。findFragmentByTag(),我也尝试过探索mTabHost的功能。没有什么可以得到它们。
你能建议一种方法来做这个或提出另一种方法吗?
答案 0 :(得分: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
...
}
}
}
答案 1 :(得分:3)
你可以像这样得到你的片段:
YourFragment frag = (YourFragment) getSupportFragmentManager()
.findFragmentById(R.id.fragmentid));
要将数据发送到片段,您可以按照此方法,创建新事务并通过捆绑包发送数据。
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();
答案 2 :(得分:1)
这可以通过 android.support.v4.app.FragmentTabHost.addTab(TabSpec,Class,Bundle args )的第三个参数来完成, 然后可以通过 android.support.v4.app.Fragment.getArguments()
检索argspublic class Tab1Fragment extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// do something with the arguments
Log.i("DEBUG", "" + getArguments());
// ...
}
}