web-dev-qa-db-ja.com

Android:前のアクティビティに戻る

私はAndroidアプリで簡単なことをしたいです。どのようにして前の活動に戻ることができますか。

前のアクティビティに戻るために必要なコード

475
Troj

Androidのアクティビティはアクティビティスタックに保存されます。前の活動に戻ると、2つのことが考えられます。

  1. startActivityForResult を使用して、別のアクティビティから新しいアクティビティを開きました。その場合は、コードから finishActivity() 関数を呼び出すだけで、前のアクティビティに戻ることができます。

  2. アクティビティスタックを追跡します。インテントで新しいアクティビティを開始するときはいつでもFLAG_ACTIVITY_REORDER_TO_FRONTFLAG_ACTIVITY_PREVIOUS_IS_TOPのようなインテントフラグを指定できます。これを使用して、アプリケーション内のアクティビティ間でシャッフルすることができます。あまり使っていません。ここにフラグを見てみましょう: http://developer.Android.com/reference/Android/content/Intent.html

コメントで述べたように、アクティビティがstartActivity()で開かれている場合、アクティビティをfinish()で閉じることができます。上ボタンを使用したい場合は、コメントに記載されているAndroid.R.id.homeとは異なり、onOptionsSelected(MenuItem item)メソッドでR.id.homeに対してアイテムIDをチェックすることでそれを捕捉できます。

455
Abhinav

Activity#finish() を試してください。これは多かれ少なかれデフォルトで戻るボタンがすることです。

215
adamp

ちょっとクリック finish() と書いてください。前のアクティビティに移動します。

74
Umer Rana

これだけ

super.onBackPressed();
65
AtanuCSE
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

これにより、スタックを維持し、スタックからそれ以降のすべてのアクティビティをクリアする前のアクティビティに移動できます。

たとえば、stackがA - > B - > C - > Dで、このフラグでBを起動した場合、stackはA - > Bになります。

30

戻るボタンの動作を制御したいですか。 2つの方法のうちの1つを介して(特定のアクティビティに移動するために)戻るボタンを上書きすることができます。

Android 1.6以下の場合:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

Android 2.0以上のみをサポートしている場合

@Override
public void onBackPressed() {
    // do something on back.
    return;
}

詳細については: http://Android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

19
Bryan Denny

現在のアクティビティを終了するか、onBackPressedで元に戻すには、これらのメソッドを呼び出すだけです。

finish();

OR

onBackPressed();
18
Akshay Paliwal

前の活動に行きたいだけにしたい場合

finish();

OR

onBackPressed();

2番目のアクティビティ以下に進みたい場合は、以下を使用してください。

intent = new Intent(MyFourthActivity.this , MySecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//Bundle is optional
Bundle bundle = new Bundle();
bundle.putString("MyValue1", val1);
intent.putExtras(bundle);
//end Bundle
startActivity(intent);
13
Ram G.

アクティビティの親を指定してAndroidManifest.xmlファイルを正しくセットアップした場合は、次のものを使用できます。

NavUtils.navigateUpFromSameTask(this);

ここがあなたの子供の活動です。

11
Thomas Decaux

あなたのonCLick()メソッドにこれを追加してください、それはあなたの前の活動に戻ります

finish();

またはあなたはこれを使うことができます。それは私のために完璧に働いた

 @Override
  public boolean onOptionsItemSelected(MenuItem item) {
  int id = item.getItemId();

      if ( id == Android.R.id.home ) {
         finish();
         return true;
       }

  return super.onOptionsItemSelected(item);
  }
10
Darshuu

明示的にonBackPressedを呼び出すことが最も簡単な方法です
前の活動に戻る を参照してください。

7

意図を使用して2番目のアクティビティを開始します(要件に応じてstartActivityまたはstartActivityForResultを使用します)。ユーザーが戻るボタンを押すと、一番上の現在のアクティビティが閉じられ、前のアクティビティが表示されます。

2つのアクティビティがあるとしましょう。1つは言語、国などのようなユーザーの設定を選択するためのもので、選択した後、ユーザーは[Next]ボタンをクリックしてログインフォームに移動します。ログインが失敗した場合、ユーザーはログインアクティビティになります。ログインが成功した場合はどうなりますか?

ログインが成功したら、別のアクティビティを開始する必要があります。それは3番目のアクティビティが開始されることを意味します、そしてまだ2つのアクティビティが実行中です。この場合、startActivityForResultを使うのが良いでしょう。ログインが成功したら、OKデータを最初のアクティビティに送り返し、ログインアクティビティを閉じます。データを受信したら、3番目のアクティビティを開始し、finishを使用して最初のアクティビティを閉じます。

6
Altaf Hussain

同じ問題を抱えて

finish();  OR super.onBackPressed();

私のためにうまくいった、両方とも同じように働いたが、returnで運が悪い

6
NoNaMe

これを試すことができます:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

        finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
5
nikki

戻るボタンを押す必要があるのでこれを試してみてください

finish();
onBackPressed();
5
Muhammed Fasil
@Override
public void onBackPressed() {
    super.onBackPressed();
}

ボタンをクリックしたい場合は、戻って単純に置く

bbsubmit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});
4
Md Hussain

呼び出し側のアクティビティでfinish()をコーディングしていない限り、デフォルトですべての新しいアクティビティ/インテントはデフォルトで戻る/以前の動作を持ちます。

4
ameyx
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
      int id = item.getItemId();

      if ( id == Android.R.id.home ) {
          finish();
          return true;
      }

      return super.onOptionsItemSelected(item);
 }

ツールバーの戻るボタン as ハードウェアの戻るボタン の両方で機能します。

3
Puni

NavUtils.navigateUpFromSameTask()をお勧めします。それは簡単で非常に簡単です。Googleデベロッパーから学ぶことができます。

2
wuxue

最初に、前のアクティビティに戻りたい場合に留意する必要があります。次に、Intentを使用して別のアクティビティに移動するときにfinish()メソッドを呼び出さないでください。

その後、現在のアクティビティから前のアクティビティに戻る2つの方法があります。

ボタンクリックリスナーの下でfinish()を呼び出すか、システムの戻るボタンを使用して戻るには、次のメソッドをオーバーライドします。

@Override
public void onBackPressed() {
    super.onBackPressed();
}
0
Monir Zzaman

以前の活動に戻るケースはほとんどありません。

ケース1: 結果を前のアクティビティに戻したい場合は ActivityA.Java

 Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
               startActivityForResult(intent,2);

FBHelperActivity.Java

 Intent returnIntent = new Intent();
 setResult(RESULT_OK, returnIntent);
 finish();

ケース2: ActivityA - > FBHelperActivity ----> ActivityA

ActivityA.Java

 Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
               startActivity(intent);

FBHelperActivity.Java

after getting of result call finish();
 By this way your second activity will finish and because 
 you did not call finish() in your first activity then
 automatic first activity is in back ground, will visible.

これを最初のアクティビティで試してみてください

Intent mainIntent = new Intent(Activity1.this, Activity2.class);
this.startActivity(mainIntent);

あなたの2番目のアクティビティで

@Override
public void onBackPressed() {
    this.finish();
}
0
byteC0de

すべての言及された答えのほかに、それらはまだこれをする代替方法です、あなたが2つのクラス、クラスAとクラスBがあるとしましょう。

クラスAチェックボックスの選択などのアクティビティをいくつか実行し、データを印刷してクラスBを意図しました。クラスB、クラスAに複数の値を渡してクラスAの以前の状態を維持したいこれを実証するためのメソッドまたはソースコードのダウンロード

http://whats-online.info/science-and-tutorials/125/Android-maintain-the-previous-state-of-activity-on-intent/ /

または

http://developer.Android.com/reference/Android/content/Intent.html

0
Daniel Nyamasyo