我有一个具有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的能力。 没有什么能得到他们。
您能否提供一个办法做到这一点,或者建议一个替代方法?
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
...
}
}
}
你可以让你的片段是这样的:
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();
这可以通过android.support.v4.app.FragmentTabHost.addTab(则tabspec,类,包参数 )的第三个参数来实现,则ARGS可以经由android.support.v4.app.Fragment.getArguments检索()
public class Tab1Fragment extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// do something with the arguments
Log.i("DEBUG", "" + getArguments());
// ...
}
}