1

現在、私はAndroidアプリケーションを書いています。その主な機能は画面上でのフィンガーペインティングです。主な問題は、アプリケーションのデータ モデルを格納する方法です。ベストプラクティスは何ですか?現在、データ モデルは次のようになっています。

public class BoardModel {
public Bitmap mBoard;

public int mLineWidth = 1;
public int mForegroundColor = Color.GREEN;
public int mBackgroundColor = Color.BLACK;
}

このクラスは、メイン アクティビティのonCreateメソッドが呼び出されるとインスタンス化されます。そのライフサイクル中にアクティビティが破棄される可能性があります。たとえば、ユーザーがデバイスの向きを縦向きから横向きに変更したときに発生します。したがって、モデルを保存するために、次のようにonSaveInstanceStateをオーバーライドしています。

protected void onSaveInstanceState(Bundle outState) {
    outState.putParcelable(KEY_MODEL, mModel);
}

onCreateメソッドを次のように変更しました。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    if (savedInstanceState == null) {
        mModel = new BoardModelParcelable();
    } else {
        mModel = savedInstanceState.getParcelable(KEY_MODEL);
    }       
}

また、 Parcelableインターフェイスを実装するために次のクラスを追加しました

public class BoardModelParcelable extends BoardModel implements Parcelable{
....
}

問題は、モデルにデータを追加するときに、BoardModelParcelableを変更して保存する必要があることです。たとえば、何かを描画するために使用される楽器を説明するクラスを追加する予定です。この場合、Parcelableインターフェイスを実装するインストゥルメント用の別のクラスを作成する必要がありますか? それとも、計器データをBoardModelParcelableに格納する必要がありますか? あまりにも多くのパーセル可能なオブジェクトを実装する必要があるようです。これほど保存コードを作成せずにモデルデータを保存する方法はありますか?

4

1 に答える 1

1

UI なしで Fragment を使用して、アクティビティの再作成間でデータを保持できます。を呼び出しsetRetainInstance(true)て、構成の変更中にこのフラグメントを保持するようにフレームワークに指示する必要があります。そのため、構成変更後のアクティビティは再作成されますが、このフラグメントはすべてのデータとともに以前の状態のままになります。このトピックに関する非常に良い記事: http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

「Android 3.0 で Fragments が導入されて以来、Activity インスタンス間でアクティブなオブジェクトを保持するための推奨される方法は、保持された「worker」Fragment 内でそれらをラップして管理することです。 Fragment#setRetainInstance(true) を呼び出すと、この破棄と再作成のサイクルをバイパスでき、アクティビティが再作成されたときにフラグメントの現在のインスタンスを保持するようシステムに通知します。

于 2013-05-24T12:42:29.980 に答える