1

アクティビティの向きの変更中にデータを保存するためにビューレス フラグメントを使用しています。おおよそ次のようになります。

public class BoardActivity extends BaseActivity {
    private DataHandler mDataHandler;

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

        // initialize the data handler
        mDataHandler = (DataHandler)mFragmentManager.findFragmentByTag("data");
        if (mDataHandler == null) {
            mDataHandler = new DataHandler();
            mFragmentManager.beginTransaction().add(mDataHandler, "data").commit();

            // initialize the data
            mDataHandler.mThreads = ...;
        } else {

            // here, the data is taken and the ListView is filled again.
            fillView();
        }
    }

    public static class DataHandler extends Fragment {
        private Topic[] mThreads;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setRetainInstance(true);
        }
    }
}

何が起こるかというと、アクティビティが残されている場合 (例: ホーム ボタンを使用)、何らかの理由でバックグラウンドで強制終了されると、そのアクティビティの再起動時にアプリがクラッシュします。その理由は、FragmentmDataHandlerは FragmentManager によって検出されますが、そのメンバー変数 ( mThreads) はnull.

フラグメント自体は保持できるのに、その変数はゼロに設定されているのはなぜですか?

4

1 に答える 1

1

フラグメント自体を保持できるのに、その変数がゼロに設定されているのはなぜですか?

フラグメントは保持されませんでした。保持されるフラグメントは、構成の変更のためにのみ保持されます。構成の変更は行われませんでした。Androidが他のアプリをサポートするためにRAMを必要としていたため、プロセスは終了しました。

于 2013-03-23T11:53:13.037 に答える