0

私は 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 :-)

4

1 に答える 1