2011-07-27 8 views
7

バックボタンを押した後にアクティビティをリフレッシュする方法がわかりません。私は現在、Bに行くという意図を引き起こすアクティビティAを持っています。そして、Bを押すと、私はAに戻りたいが、それをリフレッシュしたい。私は現在、活動をリフレッシュするには、この意図を使用することができます。onResume()を使ってアクティビティをリフレッシュする

Intent refresh = new Intent(this, Favorites.class); 
    startActivity(refresh); 
    this.finish(); 

しかし、私は適切にそれに戻った後、私の行為AをリフレッシュするためにonResume()関数を使用する方法を見つけ出すことはできません。

+1

現在のリフレッシュ方式が機能する理由は、標準のlaunchModeでアクティビティを実行しているためです。これは、startActivity(リフレッシュ)を呼び出すたびにアクティビティAの新しいインスタンスが生成されることを意味します。新しいインスタンスがそれぞれonCreate()を経由するため、これらの不要なインスタンスを作成すると、アクティビティがリフレッシュされます。これを正しく行うには、実際にアクティビティを "リフレッシュ"し、onResume()に移動するonCreate()のコードを特定する必要があります。 – glorifiedHacker

答えて

10

をリフレッシュすることができActivity A

からActivity Bを開始する

1

アクティビティのUIを更新するコードをonResume()メソッドに配置する必要があります。多少のコード​​を投稿したり、正確に何を更新しようとしているのかを説明してください。あなたはActivityBから戻ってくるActivityAの特殊な動作が必要な場合は、その後Activity AオーバーライドonActivityResult(int requestCode, int resultCode, Intent data)

にあなたは、あなたのActivity A

+0

データベースから取得した5つの文字列を含むリストビューを含むアクティビティがあります。 BackServiceメソッドを使用して実行している、つまりデータベースに変更がある場合は、文字列で新しい通知を取得します。その通知をクリックすると、リストビューにもその文字列が含まれているはずです。 OnResume()は私にそれを許可しますか? – suraj

3

使用startActivityForResult(intent, requestCode); startActivity(Intent intent)の代わりにstartActivityForResult(Intent intent, int requestCode)を使用する必要があります。

startActivityForResult(new Intent(this, ActivityB.class), REQUEST_CODE); 

この方法で、あなたはonActivityResult(int requestCode, int resultCode, Intent intent)をオーバーロードすることにより、ActivityAActivityBの終了を検出することができます:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

    if (requestCode == REQUEST_CODE) { 
     doRefresh(); // your "refresh" code 
    } 
} 

これは、あなたが戻ってボタンを押すことでActivityBを終了した場合でも動作します。その場合、resultCodeはデフォルトでRESULT_CANCELLEDになります。

関連する問題