私は Androids Fragments に関する問題を抱えています。
4 つのタブを持つ TabHost で構成される Fragment-Activity があります。これらのタブの 1 つにダイアグラムが表示されます。ダイアグラムのデータの計算は複雑で、時間がかかります。問題: ユーザーが特定のタブをクリックすると、ダイアグラムの計算が開始され、すべてが正常に機能すると仮定します。ユーザーが次のタブをクリックすると、アプリにコンテンツが表示されます。その後、ユーザーは 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 を生成します。
タブの最初のクリックは機能しますが、タブの 2 回目のクリックで、次のエラーでアプリがクラッシュします。
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.
タブホストを使用したフラグメントアクティビティのコードスニプレットを次に示します。
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);
}
}
あなたの助けに感謝します、そして私の下手な英語のために私のsry :-)