web-dev-qa-db-ja.com

Android戻ったときにアクティビティを更新する

アプリケーションでのアクティビティの1つを更新するのに少し助けが必要です。 [ホストのアクティビティ]タブを使用して、Webサービスに接続し、子アクティビティの1つからデータをダウンロードしています。子アクティビティで同期ボタンを押すと、[ホスト]タブにない新しいアクティビティを開始します。同期が完了すると、親(子アクティビティ)に戻ります。私がやりたいことは、戻ったときにアクティビティをリフレッシュすることです。インターネットで確認したところ、startActivityForResultを使用するのが最善の方法であることがわかりましたが、それを使用する方法と、完了したアクティビティから結果を受け取ったときにアクティビティを更新する方法がよくわかりません。

誰かが私を助けることができれば、私は本当に嬉しいでしょう。

編集:

私はこのコードを使用していますが、ログインonActivityResultも表示されません

MyCollectionId.class:

Intent intent = new Intent(MyCollectionId.this, Synchronization.class);
intent.putExtra("process", 2);
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if(resultCode==RESULT_OK){
     Log.e("","OnActivityResult");
    Intent refresh = new Intent(this, MyCollectionId.class);
    startActivity(refresh);
    this.finish();
 }
}

Synchronization.class:

Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
setResult(RESULT_OK,intent);
finish();
15
Android-Droid

これを行うもう1つのトリッキーな方法は、onRestart()でアクティビティを開始することです

@Override
public void onRestart(){
    super.onRestart();
    Intent previewMessage = new Intent(StampiiStore.this, StampiiStore.class);
    TabGroupActivity parentActivity = (TabGroupActivity)getParent();
    parentActivity.startChildActivity("StampiiStore", previewMessage);
    this.finish();
}

それは実際にトリックを行う必要があります。 (このコードでは、カスタムTabActivityマネージャーを使用している場合の方法を示しています。)

10
Android-Droid

ボタンを押すと:

Intent intent = new Intent(this, SyncActivity.class);
        //intent.putExtra("someData", "Here is some data");
        startActivityForResult(intent, 1);

次に、同じActivityクラスで:

   @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if(resultCode==RESULT_OK){
         Intent refresh = new Intent(this, InitialActivity.class);
         startActivity(refresh);
         this.finish();
      }
     }

同期アクティビティには次のものがあります。

setResult(RESULT_OK, null);
finish();
24
user849998

メソッドの親アクティビティで「startActivityForResult」で開始したアクティビティの結果を処理する必要があります。

@override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
   //...
}

結果に応じて、親アクティビティの情報を表示するコードをもう一度呼び出すことができます(onResume()メソッドなどに入れることもできます)。

情報のレンダリングを担当するすべてのロジックを別のメソッドに移動することをお勧めします。そして、結果を受け取った後にそれを呼び出します。親アクティビティを再開する代わりに。

4
andrii

メソッドstartActivityForResultを使用して2番目のアクティビティを開始した場合、最初のアクティビティに戻ると、最初のアクティビティのonActivityResultが呼び出されます。

これを上書きすると、そこからアクティビティを更新できます。

詳細情報 ここ および ここ を参照してください

3
Vito Gentile

StartActivityForResultを使用して、子アクティビティから子アクティビティを呼び出します。子アクティビティが完了したら、onActivityResultメソッドで親アクティビティを更新できます

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);

      //Check the result and request code here and update ur activity class

    }

以下に例を示します http://rahulonblog.blogspot.com/2010/05/Android-startactivityforresult-example.html

2
Walid Hossain