我对动物片段的问题有所了解。
我有一个Fragment-Activity,它包含一个带有4个Tabs的TabHost。 其中一个标签显示了一个图表。图表数据的计算很复杂,需要一段时间。 问题:让我们假设用户点击特定的选项卡,图表的计算开始,一切正常。现在,用户点击下一个标签,应用就会显示内容。之后,用户切换回Diagramm-Tab。因此它不会重新加载,我在Diagramm-Fragment的onCreateView中执行以下操作:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(layout == null){
layout = new PedelecRelativeLayout(getActivity());
initUI();
}
return layout;
}
如您所见,如果布局为null,则它将启动,initUI()将生成Diagramm。
第一次单击该选项卡有效,但在第二次单击选项卡时,应用程序崩溃并出现以下错误:
11-20 10:32:36.928: E/AndroidRuntime(9888): FATAL EXCEPTION: main
11-20 10:32:36.928: E/AndroidRuntime(9888): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
使用Tab-Host继承我的Fragment-Activity的Code-Snipplet:
summaryDiagram = (SummaryDiagramFragment) fm.findFragmentByTag(TAB_DIAGRAM);
...
if(summaryDiagram != null){
ft.detach(summaryDiagram);
}
...
if(tabId.equals(TAB_DIAGRAM)){
if(summaryDiagram==null){
/** Create AndroidFragment and adding to fragmenttransaction */
summaryDiagram = new SummaryDiagramFragment();
ft.add(R.id.realtabcontent, summaryDiagram, TAB_DIAGRAM);
}else{
/** Bring to the front, if already exists in the fragmenttransaction */
ft.attach(summaryDiagram);
}
}
感谢您的帮助,感谢我的英语不好: - )
答案 0 :(得分:0)
您不得自行分离然后重新附加片段。它应该保留在活动上。 要在每次onCreate(Bundle arg)调用之后获取片段实例,如果活动从已保存状态恢复,则必须在FragmentManager中找到您的片段。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout);
if (savedInstanceState != null) {
fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
} else {
fragment = Fragment.instantiate(this, YourFragment.class.getName());
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragment_container, fragment, YourFragment.class.getName());
ft.commit();
}
}