私はAndroidアプリで簡単なことをしたいです。どのようにして前の活動に戻ることができますか。
前のアクティビティに戻るために必要なコード
Androidのアクティビティはアクティビティスタックに保存されます。前の活動に戻ると、2つのことが考えられます。
startActivityForResult を使用して、別のアクティビティから新しいアクティビティを開きました。その場合は、コードから finishActivity() 関数を呼び出すだけで、前のアクティビティに戻ることができます。
アクティビティスタックを追跡します。インテントで新しいアクティビティを開始するときはいつでもFLAG_ACTIVITY_REORDER_TO_FRONT
やFLAG_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をチェックすることでそれを捕捉できます。
Activity#finish()
を試してください。これは多かれ少なかれデフォルトで戻るボタンがすることです。
ちょっとクリック finish() と書いてください。前のアクティビティに移動します。
これだけ
super.onBackPressed();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
これにより、スタックを維持し、スタックからそれ以降のすべてのアクティビティをクリアする前のアクティビティに移動できます。
たとえば、stackがA - > B - > C - > Dで、このフラグでBを起動した場合、stackはA - > Bになります。
戻るボタンの動作を制御したいですか。 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
現在のアクティビティを終了するか、onBackPressedで元に戻すには、これらのメソッドを呼び出すだけです。
finish();
OR
onBackPressed();
前の活動に行きたいだけにしたい場合
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);
アクティビティの親を指定してAndroidManifest.xmlファイルを正しくセットアップした場合は、次のものを使用できます。
NavUtils.navigateUpFromSameTask(this);
ここがあなたの子供の活動です。
あなたの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);
}
明示的にonBackPressed
を呼び出すことが最も簡単な方法です
前の活動に戻る を参照してください。
意図を使用して2番目のアクティビティを開始します(要件に応じてstartActivity
またはstartActivityForResult
を使用します)。ユーザーが戻るボタンを押すと、一番上の現在のアクティビティが閉じられ、前のアクティビティが表示されます。
2つのアクティビティがあるとしましょう。1つは言語、国などのようなユーザーの設定を選択するためのもので、選択した後、ユーザーは[Next]ボタンをクリックしてログインフォームに移動します。ログインが失敗した場合、ユーザーはログインアクティビティになります。ログインが成功した場合はどうなりますか?
ログインが成功したら、別のアクティビティを開始する必要があります。それは3番目のアクティビティが開始されることを意味します、そしてまだ2つのアクティビティが実行中です。この場合、startActivityForResult
を使うのが良いでしょう。ログインが成功したら、OKデータを最初のアクティビティに送り返し、ログインアクティビティを閉じます。データを受信したら、3番目のアクティビティを開始し、finishを使用して最初のアクティビティを閉じます。
同じ問題を抱えて
finish(); OR super.onBackPressed();
私のためにうまくいった、両方とも同じように働いたが、return
で運が悪い
これを試すことができます:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
戻るボタンを押す必要があるのでこれを試してみてください
finish();
onBackPressed();
@Override
public void onBackPressed() {
super.onBackPressed();
}
ボタンをクリックしたい場合は、戻って単純に置く
bbsubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
呼び出し側のアクティビティでfinish()
をコーディングしていない限り、デフォルトですべての新しいアクティビティ/インテントはデフォルトで戻る/以前の動作を持ちます。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if ( id == Android.R.id.home ) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
ツールバーの戻るボタン as ハードウェアの戻るボタン の両方で機能します。
NavUtils.navigateUpFromSameTask()をお勧めします。それは簡単で非常に簡単です。Googleデベロッパーから学ぶことができます。
その後、現在のアクティビティから前のアクティビティに戻る2つの方法があります。
ボタンクリックリスナーの下でfinish()
を呼び出すか、システムの戻るボタンを使用して戻るには、次のメソッドをオーバーライドします。
@Override
public void onBackPressed() {
super.onBackPressed();
}
以前の活動に戻るケースはほとんどありません。
ケース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();
}
すべての言及された答えのほかに、それらはまだこれをする代替方法です、あなたが2つのクラス、クラスAとクラスBがあるとしましょう。
クラスAチェックボックスの選択などのアクティビティをいくつか実行し、データを印刷してクラスBを意図しました。クラスB、クラスAに複数の値を渡してクラスAの以前の状態を維持したいこれを実証するためのメソッドまたはソースコードのダウンロード
または
http://developer.Android.com/reference/Android/content/Intent.html