2

デバイスを回転させたときに、アプリのフラグメントがアクティビティのビューに再追加されません。ドキュメント(およびSOに関する同様の質問)を正しく理解している場合、これはフラグメントマネージャーで処理する必要があります(マニフェストで android:configChanges を指定する必要はありません)。

私のアクティビティは次のようになります。

public class MainActivity extends SherlockFragmentActivity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        if (savedInstanceState == null){
            getSupportFragmentManager().beginTransaction()
                .add(R.id.main_fragment_placeholder, new DashboardFragment(),"dashboard")
                .commit();
        }
    }
}

Fragment は次のようになります (わかりやすくするためにクリックリスナーなどは省略しています)。

public class DashboardFragment extends SherlockFragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_dashboard, container, false);
    }
}

レイアウト ファイルは (activity_main.xml) のようになります。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:id="@+id/main.main">

    <FrameLayout android:id="@+id/main_fragment_placeholder"
             android:layout_height="fill_parent"
             android:layout_weight="1"
             android:layout_width="0px"
             />

</LinearLayout>

そしてfragment_layout.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main.wrapper"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <my.layout.DashboardLayout
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"
           android:id="@+id/main.dashboard">
    <!-- some buttons here -->
    </my.layout.DashboardLayout>

</LinearLayout>

ただし、デバイスを回転させると、画面が常に空白になります。

4

2 に答える 2

11

私は愚かなことをしたことが判明しました。onSaveInstanceState(...)を呼び出さずにアクティビティのメソッドをオーバーライドしたsuper.onSaveInstanceState()ため、フラグメントが再作成されませんでした。他の誰かの時間を節約できることを期待して、ここに回答を投稿してください!

于 2012-10-26T07:42:05.553 に答える
0

フラグメントは通常、構成の変更時に再作成されます。これが発生したくない場合は、

setRetainInstance(true);フラグメントのコンストラクターで

これにより、構成の変更中にフラグメントが保持されます。

http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(ブール値)

于 2012-10-25T09:07:19.310 に答える