アプリケーションでのアクティビティの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();
これを行うもう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マネージャーを使用している場合の方法を示しています。)
ボタンを押すと:
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();
メソッドの親アクティビティで「startActivityForResult」で開始したアクティビティの結果を処理する必要があります。
@override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//...
}
結果に応じて、親アクティビティの情報を表示するコードをもう一度呼び出すことができます(onResume()メソッドなどに入れることもできます)。
情報のレンダリングを担当するすべてのロジックを別のメソッドに移動することをお勧めします。そして、結果を受け取った後にそれを呼び出します。親アクティビティを再開する代わりに。
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