2012-01-25 4 views
2

この問題に関するいくつかのトピックがありますが、私には解決策がないので、この問題を再度投稿しています。保存されたインスタンスから起動する

私は2つのアクティビティを含むアプリケーションを持っています。最初はログイン用ですが、今はログイン機能を実装していないため、ボタンをクリックして2回目のアクティビティが開始されます。 2番目のアクティビティでは、ユーザーの現在地を中心としたマップが表示されます。また、最初のログインアクティビティに戻るためのログアウトボタンも含まれています。

ログインアクティビティはLAUNCHERアクティビティです。このアプリケーションを最初に開いたときにログインするようにしたいと思っています。その後、ログインボタンをクリックした後、私は第2マップ活動を開始し、第1を終了する。

しかし、ホームボタンを押して2番目のマップアクティビティを終了すると、マップアクティビティはバックグラウンドで実行されます。今、私がこのアプリを「最近開いた」アプリリストから開くと、2番目のマップアプリに戻ります。しかし、アンドロイドデスクトップのアプリリストから開くと再開するのではなく、最初のログインアクティビティの新しいインスタンスを起動します(2番目のマップアクティビティ)。新しく立ち上げられたログインアクティビティでは、ヒットした場合、マップアクティビティに戻ることが実際にあったため、マップアクティビティはスタックのすぐ後ろにあります(私は思う)。

要するに、私はこのアプリの保存されたインスタンスからアプリを起動したいと思う。私はthisと思われており、それは私の問題ではありません。

これは私の問題の明確な説明ですと願っています。関連するコードは次のとおりです。私はMono for Androidをコードに使用していますが、それは重要ではないと思います。

Login : Activity 

     loginButton.Click += delegate 
     { 
      StartActivityForResult(typeof(MapDemo), 0); 
      Finish(); 
     }; 

MapDemo : MapActivity 

     logoutButton.Click += delegate 
     { 
      var intent = new Intent(); 
      SetResult(Result.Ok, intent); 
      Finish(); 

     }; 

ここで私が見つけたリンクには、私と同じような問題があります。

Start activity after Resume
http://forum.xda-developers.com/showthread.php?t=856386
Android Resume Activity

私はそれはので、私は間違ってStartActivityForResultメソッドを使用しているのかもしれません実現。モノを使って少し違っていますが、私の問題が何であるかを推測しているなら、私にそれを指摘してください。大いに感謝する!この質問への応答がないため、

答えて

0

私は、これはそれを行うための最善の方法ではないと確信している..しかし、私は私の簡単なアプリを推測しますスプラッシュ画面またはレイアウトリソースがまったくないアクティビティです。

私はこのようにアプリケーションをブートストラップします。このコードでは、ユーザーがログインしているかどうかを検出し、条件付きでログイン画面を表示できます。

戻るボタンを使用してユーザーがスプラッシュ/開始アクティビティに戻ることを希望しない場合は、次のようなものを使用できます(これは別のStackOverflow回答から得たものです)。

public override void OnAttachedToWindow() 
    { 
     var finishTime = DateTime.Now.AddMilliseconds(3000); 

     base.OnAttachedToWindow(); 
     new Thread(() => 
     { 
      while (DateTime.Now < finishTime) Thread.Sleep(100); 
      RunOnUiThread(Finish); 
     }).Start(); 
    } 

これは、3秒後にそのアクティビティをスタックから削除します。

+0

これは私が今持っているものと似ていますが、条件ログインが満足できるかどうかを確認して、どのアクティビティを表示するかを決定すると思います。また、あなたの背中について言及することは非常にいいです。私は試してみます。提案していただきありがとうございます! – lynnyilu

0

大丈夫、私はsingleTaskに活性の両方を設定し、基本的に非常に単純な(そしておそらく-ない - グッド・プラクティス - しかし-ない作業溶液)

を考え出しました。したがって、1つのインスタンスしか作成できません。私は私の2番目の活動のために1番目の活動の静的変数を保持します。 2番目のアクティビティのOnCreate私はそれをtrueに設定し、2番目のアクティビティのすべてのFinish()の前に、この変数をfalseに設定します。

と2回目のアクティビティのonRestartこれは、変数is2ndActivityRunningを確認するだけです。そうであれば、startActivity()を直接使用します.2つ目のアクティビティのインスタンスが1つしか作成されないため、作成した古い状態を見つけることができます。そうでない場合、第1アクティビティは通常通り表示されます。

あなたがスタートアップのようなものを検討するかもしれない...限り、それが動作するよう..

関連する問題