2012-11-20 60 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(); 
    } 
} 
相關問題