我正在尝试从我的fragmentTabHost中检索一个片段:
private void initView() {
FragmentTabHost mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("summary").setIndicator("Summary"),
SummaryActivity.class, bundle);
SummaryActivity summaryActivity = (SummaryActivity) getSupportFragmentManager().findFragmentByTag("summary");
System.out.println(summaryActivity);
}
当我尝试在创建片段后立即获取片段时,会返回null 。这可能是一个线程问题。在这种情况下,我应该如何,甚至何时调用getFragmentByTag来检索我的片段?
答案 0 :(得分:2)
您正在寻找的Fragment
不在堆栈中。在您找回它时,它甚至没有添加/存在。
findFragmentByTag
方法将查找并匹配在事务中添加的最后一个片段,如果它与所需的片段不匹配,那么它将使用历史记录中的可用列表进行搜索。最后,如果你的标签没有任何片段,它将return null
。
请确保先将Fragment
添加到视图中。
视图应该接收片段/ tabhost以使其在生命周期中可用。
在进行tabHost
查找之前,您必须将findFragmentByTag
返回到视图以添加片段。
例如:
您在Fragment
onCreateView
,然后在充气后应将tabhost
返回到视图。
onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mTabHost = new FragmentTabHost(getActivity());
mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.fragment1);
mTabHost.addTab(mTabHost.newTabSpec("fragmenttag").setIndicator("Fragmenttag"),
FragmentStackSupport.CountingFragment.class, null);
return mTabHost;
}
然后您的Fragment
可能会在后筹码中出现,您可以通过Tag
取回。
答案 1 :(得分:0)
片段标记只能在片段事务处理期间设置。选项卡主机标签引用其他内容。如果在片段根视图上设置了id,请尝试使用findFragmentById()。