2011-12-04 7 views
1

イブニング、コールonrestart/onresume時に戻るボタンをクリック

私は固定得ることができない小さな問題に直面しています。私は1つの 'ベース'アクティビティ(名前:TestActivity、拡張するActivityGroup)を持っています。新しいアクティビティに行くたびに、次のビットを使用して新しいビューを読み込みます。

Intent intent = new Intent(Start.this, CitySelect.class); 
View view = TestActivity.group.getLocalActivityManager().startActivity("cityselect", intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 
TestActivity.group.replaceView(view); 

あなたは私がビュー「を置き換える」にreplaceViewメソッドを呼んでいる見ることができるように。コードについては、以下を参照してください:私はonBackPressedをオーバーライドしていますすべての活動で

public void replaceView(View v) 
{ 
    history.add(v); 
    setContentView(v); 
} 

@Override 
public void onBackPressed() 
{ 
    TestActivity.group.back(); 
} 

back方法については以下を参照してください:

public void back() 
{ 
    if (history.size() > 0) 
    { 
     history.remove(history.size() - 1); 

     if (history.size() > 0) 
     { 
      View v = history.get(history.size() - 1); 
      setContentView(v); 
     } 

     else 
     { 
      finish(); 
     } 
    } 

    else 
    { 
     finish(); 
    } 
} 

今すぐ問題が来る:とき私は自分の電話機に戻るボタンを使用しています。前のアクティビティはフォアグラウンドに来て、ビュー(アクティビティ)で何も呼び出されません。私がアクティビティライフサイレージに従うとき、私はonResumeが呼ばれると思ったが、そうではない。何も起こりません。

質問:私が戻るボタンを押したときにonResumeメソッドを呼び出すにはどうすればよいですか?

+0

「何も起こらない」とはどういう意味ですか? 'onDestroy'が呼び出されるかどうかチェックしていますか? – Craigy

+0

'onDestroy'は呼び出されませんが、' onPaused'は呼び出されます。 –

+0

私はもっと具体的でなければなりません。ビューを置き換えるときに 'onPaused'が呼び出されます。前のビューがフォアグラウンドに戻るときに関数が呼び出されないということです。私は 'onResume'が呼び出されると期待しますが、そうではありません。 –

答えて

5

@Commonswareは、ActivityGroupsが実際には廃止されたことを親切に指摘しました。私たちは代わりにフラグメントに移動するはずです。

あなたと同じ問題を抱えて戦っているのは、私が認めようと思っているよりも長いです。戻るボタンを押した後、ActivityGroup内からビューにフォーカスを戻すときに、一般的に使用されるツール(OnResume、OnRestart)は機能しません。

は残念ながら、私はまだ私は苦労でActivityGroup内から後のバックボタンが押されたonResume(私は重くACTIVITYGROUPSを使用して、このレガシーコードに投資しておりますので。)への道を見つける必要があります。

これが役に立ちます。あなたが開始する活動のIDの履歴を保持、代わりにビューの歴史を維持する

- - 編集

私はこれを行う方法を発見しました。開始するすべてのアクティビティには、それに関連付けられた固有のIDがあります。したがって、back()を呼び出すと、アクティビティのIDが取得され、新しいアクティビティが開始されます。これは、あなたの望むようにあなたのアクティビティの "onResume()"メソッドをトリガします。新しいビューをロードするためにビットを、次の :ここ

は、私はあなたが提供されたコードを再構築する方法をある

Intent intent = new Intent(Start.this, CitySelect.class); 
View view =  TestActivity.group.getLocalActivityManager().startActivity("cityselect", intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 
TestActivity.group.replaceView(view,"cityselect"); 

"replaceView()" メソッド内のビューの交換:

public void replaceView(View v, String activityId) 
{ 
    history.add(activityId); 
    setContentView(v); 
} 

最後に、ActivityGroup内のback()メソッド:

public void back() 
{ 
if (history.size() > 0) 
{ 
    history.remove(history.size() - 1); 

    if (history.size() > 0) 
    { 
     //View v = history.get(history.size() - 1); 
     //setContentView(v); 

     LocalActivityManager manager = getLocalActivityManager(); 
     String lastId = mIdList.get(history.size()-1); 
     Intent lastIntent = manager.getActivity(lastId).getIntent(); 
     Window newWindow = manager.startActivity(lastId, lastIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
     setContentView(newWindow.getDecorView()); 

    } 

    else 
    { 
     finish(); 
    } 
} 

else 
{ 
    finish(); 
} 

}

希望はもう少しお役に立ちます:)

+0

これは正常に動作しています... ありがとう! – Deepak

関連する問題