2016-09-02 13 views
0

私はアクティビティAから生成されたアクティビティBを持っています。アクティビティBでは、私はアクティビティCに私を送るボタンを持っています。アクティビティCの中では、 > service-> B - 私は活動B.アクティビティの再利用ロジック

に戻りたい、そのサービスは、だから、A-> B-> Cだろう。 B活性は、APK転送のチャット/歴史のようなもので、今の私はまだデータベースを使用していない(後で私はそのためのコードを変更します、私は今はできない)こと

アクティビティBに表示されるデータは、そのサービスに由来します(私はapkファイルを送信します)。ファイルが送信された後、私は送信したアプリケーションの名前をアクティビティBに取得します。私はそのチャット/履歴にそれを表示することができます。

サービスの内部で、私は活動Bを実行する新しい意思を作成した場合、それは常に代わりに既に存在した古い情報を「維持」で、再び活動Bを開始します。

どのように私はこれを行う必要があると思いますか?

すでにスタックに入っているアクティビティBを呼び出すフラグがあることがわかりました。そのときには、onResume()メソッド(右?))に行きますが、 ?

これを行うにはどのような方法が最適ですか?

ありがとう!それはあまりにも混乱している場合は申し訳ありません。あなたのFirstActivityから

+0

私の答えを参照してください。 –

答えて

2

は場所がマニフェストに以下、残る:

<activity android:name="ActivityB" 
    android:launchMode="singleTask" /> 

これは活動を維持します。 onCreateは一度だけ呼び出されます。それ以上のご要望はonNewIntent()で処理してください。

LocalActivityManager.javastartActivity DOCから:現在のアクティビティは、非多重起動モード(例えば、 singleTop)を使用して、またはインテントはFLAG_ACTIVITY_SINGLE_TOPフラグ セットを有する場合

、現在のアクティビティは、実行中のままになりますその Activity.onNewIntent()メソッドが呼び出されました。

+0

これから、さらなるリクエストはonNewIntent()で処理する必要がありますか? –

+0

'onNewIntent()'は既に実行中の 'singleTask'アクティビティのエントリポイントを意味し、' onCreate() 'を呼び出さないでしょう。 – j2ko

+0

私は問題を抱えています、メソッドonNewIntent()も最初の時間に呼ばれますか?少なくともそれは私に起こっていることです。 onCreate()とonNewIntent()を実行しています –

1

は、例えば、startActivityForResult()メソッド

を使用してSecondActivityを呼び出す:あなたのSecondActivityで

Intent i = new Intent(this, SecondActivity.class); 
startActivityForResult(i, 1); 

は、あなたが戻ってFirstActivityに戻したいデータを設定します。戻ってきたくない場合は、何も設定しないでください。例えば

:あなたはデータを返送する場合secondActivityでは:あなたのFirstActivityクラスの書き込みで今すぐ

Intent returnIntent = new Intent(); 
setResult(Activity.RESULT_CANCELED, returnIntent); 
finish(); 

のための次のコード:

Intent returnIntent = new Intent(); 
returnIntent.putExtra("result",result); 
setResult(Activity.RESULT_OK,returnIntent); 
finish(); 

あなたはデータ返すようにしたくない場合onActivityResult()メソッドActivityBを作るために

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 1) { 
     if(resultCode == Activity.RESULT_OK){ 
      String result=data.getStringExtra("result"); 
     } 
     if (resultCode == Activity.RESULT_CANCELED) { 
      //Write your code if there's no result 
     } 
    } 
}//onActivityResult 
1

スタート活動Cあなたはそれが成功したか失敗であるかを識別するために、結果コードで活動を終えることができるサービスで

Intent nextIntent = new Intent(this, ActivityC.class); 
startActivityForResult(nextIntent, requestCode); 

を使用します。 アクティビティBでは、結果をonActivityResultで受け取ります。成功した場合は、データベースからデータを取り出してください(シングルトンのDatahelperクラスを使用して、データベースを実装していないようにデータを設定/取得します。

これはあなたの問題を解決すると思います。

関連する問題