1

これは、何よりも構造/設計哲学の問題です。

現在、ユーザーが表示するためにプロファイルを保存およびロードするメインのホスト アクティビティがあります。プロファイルの資格情報は、フラグメント A 内に表示されます (ユーザー名、誕生日など)。これは、フラグメント トランザクションを使用して表示する前に、プロファイルを引数としてフラグメントに渡すことによって行われます。

ユーザーが画面を離れたり回転したりした場合、そのプロファイル データを保存するにはどうすればよいですか? Fragment AまたはそのHostActivity内のonPauseから保存する必要がありますか?

また、フラグメント A でプロファイルの編集もできるとしたらどうでしょうか? ユーザーが変更を確認したら、その HostActivity にアクティビティから保持されているメイン プロファイルを更新するように通知する必要がありますか?

それとも、 FragmentA.onPause が呼び出されるまで待つ方がよいでしょうか? 何かがフラグメントに強制的に onPause を呼び出させるまで待つことができると思います。その時点で、フラグメントの状態とホスト アクティビティからのプロファイル アクティビティの両方を保存できます。

私を混乱させる主な点は、2 つのプロファイル オブジェクトを管理する必要があるかということです。HostActivity とその FragmentA の両方がそれを使用します。保存、読み込み、編集の間を行ったり来たりしなければならないのは少し混乱します。このすべてを 1 つのクラスから処理することはできませんか?

さて、私は2つの非常に優れた実行可能な答えを持っています. しかし、どちらが私の目的に適していますか? プロファイルを処理するには、sqlLite データベースまたはグローバル Java シングルトンを使用する必要がありますか? セッションごとにアクティブにできるプロファイルは 1 つだけです。プロファイルの保存、読み込み、および編集も考慮する必要があります。

4

2 に答える 2

0

ユーザープロファイルデータの保存にsqliteデータベースを使用しないのはなぜですか? ユーザー プロファイル データにアクセスする必要があるときはいつでも、クエリを実行するだけです。

関連するすべてのデータを onPause メソッドに保存できます。データベースを使用すると、データの永続性が確保され、フラグメント/アクティビティの再作成が妨げられます!

于 2013-10-04T21:47:01.343 に答える
0

1 つのセッションでユーザーごとに 1 つのプロファイルしか存在できない場合 (上記で提案したように) Java singleton class、.

 private ProfileOject() {
    // Exists only to defeat instantiation.
}

public static ProfileObject getInstance() {
    if(instance == null) {
        instance = new ProfilerObject();
    }
    return instance;
}

通常どおり getter と setter を使用します。

Profile各アクティビティでは、次のようなものを取得できます。

profile = ProfileObject.getInstance();

これは、 で更新を行うとFragment A、 が呼び出されたときにactivity、更新された値が からフェッチされることを意味しますprofile object

onRotate/Pause/Resumeuseに関してはsavedInstanceState、以下の例を参照してください。

//Use onSaveInstanceState(Bundle) and onRestoreInstanceState

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {

  // Save UI state changes to the savedInstanceState.   
  // This bundle will be passed to onCreate if the process is  
  // killed and restarted.

  savedInstanceState.putBoolean("MyBoolean", true);  
  // etc.  
  super.onSaveInstanceState(savedInstanceState);  
}  
//onRestoreInstanceState  
    @Override  
public void onRestoreInstanceState(Bundle savedInstanceState) {  
  super.onRestoreInstanceState(savedInstanceState);  
  // Restore UI state from the savedInstanceState.  
  // This bundle has also been passed to onCreate.  
  boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");  
}
于 2013-10-04T21:47:27.880 に答える