8

http://developer.android.com/guide/components/fragments.htmlの図2を知っています。画面を回転させて、最終的に「フラグメントアクティブ」に戻ると、「フラグメントアクティブ」から何が起こるのでしょうか。

私の質問の背景は、ポートレートモードとランドスケープモードのどちらで起動しても正常に動作するアプリがあるということです。しかし、画面の回転ではダンプします

Fragment com.bla.bla did not create a view.

このフラグメントには基本的にonCreateViewのみが実装されており、他には何も実装されていません。

public View onCreateView(LayoutInflater i, ViewGroup c, Bundle s)
{
   return i.inflate(R.layout.mylayout, c, false);
}

画面の回転で何が起こるかを正確に知ることで、問題を解決したいと思っています...

編集:

私はコメンターが提案したことを試しました、それについてのいくつかのより多くの情報。したがって、それらはすべて、基本的に空のアクティビティレイアウトを用意し、それが正しく表示された場合はプログラムでフラグメントを追加することを提案します。私は縦向きと横向きのmain.xmlを持っていますが、どちらも非常によく似ています(違いは水平と垂直です):

main.xml:

<LinearLayout xmlns:android="http:// and so on" 
    android:layout_width="fill_parent" 
    android:layout_heigt="wrap_content" 
    android:orientation=vertical" 
    android:id="@+id/myContainer">
</LinearLayout>

私のアクティビティのonCreateメソッドは次のようになります。

super.onCreate(savedInstanceBundle);
setContentView(R.layout.main);

Fragment1 f1 = newFragment1();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.myContainer, f1);
//and I need a second fragment
Fragment2 f2 = newFragment2();
ft.add(R.id.myContainer, f2);
ft.commit();

画面の回転はそれで機能するようです(これまでのところありがとうございます!)が、横向きでは、縦向きの最初のフラグメントのみが表示され、2番目は複数回表示されます(回転する頻度が高いほど、追加される頻度が高くなります)。したがって、レイアウトに問題があるか、このような複数のフラグメントを追加できません。それがレイアウトの問題であるかどうかをまだ把握しようとしていますが、まだ手がかりはありません。ヒントはありますか?

4

1 に答える 1

3

私があなたの問題を理解する方法では、毎回フラグメントを追加するべきではありません。現在あるものを新しいフラグメントに置き換える必要があります。

ft.replace(R.id.myContainer1, f1);
//and I need a second fragment
Fragment2 f2 = newFragment2();
ft.replace(R.id.myContainer2, f2);

Fragmentライフサイクルに関しては、画面を回転させると、ホスティングがActivity破棄されて再作成されます。したがって、すべてが正しくonDetach()呼び出され、その後に。で始まるすべてが続く必要がありますonAttach()

知るための最も確実な方法は、すべてのライフサイクルメソッドをオーバーライドし、それらすべてにログメッセージを入れることです:-)

于 2012-08-02T13:50:39.630 に答える