2009-09-20 19 views
9

私は3つの異なるアクティビティを持っています。二重の私の目標は、それを:Android - 最後に閲覧したものを復元するアクティビティ

  1. ユーザーはアプリが、ユーザーがアプリを終了した場合でも、左のところ、私は開始したいが再開される何か他のものに切り替わると、最後の活動は、私が見る最後にそれを復元したい再開さ
  2. アプリが終了した場合、私はかなり私が必要なものを取得する場所が、 onCreate() - 状態(この1つは私がachiveする方法についてはかなり良いアイデアを持っていると思う)

私はこの問題は、ないスタート/を停止すると思います。その場合、マニフェストで設定したアクティビティが選択されます。私はそのデフォルトの活動のonCreate()メソッドに何かを置くことができると思うが、私はおそらく行方不明だより良い方法はありますか?

答えて

6

あなたのアプリが「終了」されていない場合は、#1が既に動作するはずと#2はちょうどonRestoreInstanceState()でそれらを復元し、その後onSaveInstanceState()にバンドルに自動的に管理されていない任意の値を保存が必要です。

これはちょっとしたハックですが、アプリの実際に終了した場合の#1の最適なオプションは、最新のアクティビティを各アクティビティクラスのonResumeに保存することですあなたの最初のアクティビティのonCreateを実行し、チェックしてから正しいアクティビティを開始してください...最初は空白のアクティビティに入れてください。

StartActivity:

public class StartActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // get last open Activity 
     String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", ""); 
     if (last_activity == MyActivity2.getSimpleName()) { 
      startActivityForResult(new Intent(this, MyActivity2.class)); 
     } else if (last_activity == MyActivity3.getSimpleName()) { 
      startActivityForResult(new Intent(this, MyActivity3.class)); 
     } else { 
      // assume default activity 
      startActivityForResult(new Intent(this, MyActivity1.class)); 
     } 
    } 

    public void onActivityResult() { 
     // kill the activity if they go "back" to here 
     finish(); 
    } 
} 

そして、他のすべての活動(MyActivity1,2,3)にそのような値を保存します。このような何か

@Override 
public void onResume() { 
    Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit(); 
    e.putString("last_activity", getClass().getSimpleName()); 
    e.commit(); 

    super.onResume(); 
} 

あなたはまた、処理する必要があります各アクティビティのデータを手動で保存/復元します。必要なすべての値を、各アクティビティのonPause()内の設定に保存してから、onResume()でリストアすることができます。

+0

ありがとうfiXedd、私はこれがハックだとは思わない。ディスパッチャパターンのように聞こえます。私は何かが不足していることを望んでいましたし、これをやるより簡単な方法があります。 – Bostone

+0

startActivityForResultの代わりにstartActivityを実行してからfinish()を実行するのはどうですか? –

+0

マニフェストのlaunchMode設定にも注意してください。私は "singleTask"に設定しましたが、最後のアクティビティを正しく再開させるために "singleTop"に変更しました。私はhttp://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmodeで素敵な説明を見つけました –

0

あなたはonSaveInstanceStateを実装したいと思います。これはあなたの活動の現在の状態をバンドルに保存します。そのバンドルはonCreateのアクティビティに渡され、値をリセットするために使用できます。

http://developer.android.com/guide/topics/fundamentals.html#actstate

+0

私は理解しているように、それは主に#2になります。ユーザーが最後に表示していたアクティビティを選択する必要があります。それから私はその状態を復元することができます – Bostone

1

onSaveInstanceState()は、長期間の状態では使用できません。つまり、ユーザーは電話機の電源を切ってから、あとで不確定な点で電源を入れ直します。状態をパワーサイクルに耐えたい場合は、独自の長期的な状態メカニズムを作成する必要があります。

関連する問題