2012-11-20 37 views
0

我对Androids片段的问题的股票。Android片段:指定的孩子已经有一个父级片段 - 错误

我有一个片段活动,其中包含TabHost与4个选项卡。 其中一个标签显示了一个图。图表的数据计算很复杂,需要一段时间。 问题:让我们假设用户点击特定的Tab,图表计算开始,一切正常。现在用户点击下一个标签,应用程序将显示内容。之后,用户切换回Diagramm-Tab。因此,它不会重新加载,我做的Diagramm片段的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一个代码Snipplet -Host:

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

没有人一个想法? – iTamp

回答

0

您不能分离,然后自己重​​新连接片段SRY。它应该继续活动。 要在每次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(); 
    } 
} 
相关问题