31

アクションバーを使用しています。「上」ボタンを使用して、詳細アクティビティからメインアクティビティに戻ります。これは正常に機能します。同様に、ユーザーはシステムの「戻る」ボタンを押してメインアクティビティに戻ることができます。

私の主な活動では、onCreate()データはインターネットからダウンロードされ、アプリの起動時に表示されます。アクションバーの「上」ボタンを使用して詳細からメインアクティビティに移動すると、onCreate()実行され、データが再ダウンロードされることに気付きました。ただしonCreate()、システムの「戻る」ボタンを使用すると実行されないため、メインのアクティビティビューがすぐに表示されます。

「上へ」ボタンを実装するために詳細アクティビティで使用するコードは次のとおりです。

switch (item.getItemId()) {
   case android.R.id.home:
      Intent intent = new Intent(this, MainActivity.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(intent);
      return true;

「上」ボタンを「戻る」ボタンのように動作させ、再実行しないようにしますonCreate()。しかし、これを実現する方法や、「戻る」ボタンがメインアクティビティに戻るために実装するコードパスがわかりません。

ありがとう!

4

6 に答える 6

49

まったく新しいアクティビティを開始する代わりに、現在の詳細アクティビティを終了するだけです

switch (item.getItemId()) {
   case android.R.id.home:
      finish();
      return true;

次に、アクティビティスタック(メインアクティビティ)の前のアクティビティに戻り、onCreateを呼び出さないでください

于 2012-04-25T16:52:05.540 に答える
10

UpにBackとまったく同じことをさせたい場合は、次のようにすることができます。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}

onBackPressed()呼び出しだけのデフォルトの実装ですが、オーバーライドできることに注意してfinish()くださいonBackPressed

于 2014-10-01T23:43:55.740 に答える
8

この投稿でより良い解決策を見つけることができると思います。

呼び出しは特定の状況で機能しますが、ドキュメントにfinish()記載されている動作を常に生成するとは限りません。例:

ここに画像の説明を入力してください

電話で

Intent intent = NavUtils.getParentActivityIntent(this); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
NavUtils.navigateUpTo(this, intent);

離れた状態の親アクティビティに戻ります。フラットなアプリ構造の場合でも、[戻る]ボタンと同じように機能します。

于 2014-05-03T02:38:40.183 に答える
0

実際の「ホーム」機能については、「App / Activity/ReorderActivities」の下にAPIデモが表示されます。

理由:次のようなものがある場合はどうなりますか:activity1-> activity2-> activity3で、アクションバーのホームボタンを押してactivity1に移動したい場合はどうすればよいですか?

于 2012-04-25T17:16:52.523 に答える
0

最も簡単な方法は、詳細アクティビティの「getParentActivityIntent」メソッドをオーバーライドして、フラグ「Intent.FLAG_ACTIVITY_CLEAR_TOP」を追加することだと思います。

@Nullable
@Override
public Intent getParentActivityIntent() {
    Intent intent = super.getParentActivityIntent();
    if (intent != null) {
        return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    }
    return intent;
}
于 2016-05-26T14:51:58.140 に答える
0

誰かのために手に入れることができる別の解決策があります。ユーザーが[戻る]ボタンと[ActionbarBack]ボタンを押したときも、同じ二重動作が発生しました。私はBackbtnの振る舞いで大丈夫でした。アクティビティを再現したくありませんでした。だから私は方法を無効にしました

     @Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

私にとってはうまくいく

于 2017-05-23T15:32:15.247 に答える