161

私にはメインアクティビティがあり、ボタンをクリックすると新しいアクティビティが開始され、次のコードを使用して実行しました。

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

上記のコードは、メインアクティビティから実行されました。

現在、メインアクティビティによって呼び出される新しいアクティビティに、戻るボタンがあります。この戻るボタンをクリックすると、新しいアクティビティを閉じて、元のメインアクティビティに戻らなければなりません。

(新しいアクティビティから)電話をかけてみsuper.finish()ましfinish() たが、これでアプリケーション全体(メインのアクティビティを含む)が閉じます。

現在フォーカスしているアクティビティを閉じてから、メインのアクティビティに戻るにはどうすればよいですか?

編集済み

携帯電話の戻るボタンもアプリ全体を閉じるという事実から、2番目のアクティビティを誤って開始したと思いますか?


OK私は探していました、

同じマニフェストコードと同じコードを使用してアクティビティを開始する設定アクティビティを作成しました。

設定アクティビティでは、戻るボタンを押すとメインアクティビティに戻ります。

上記のメインの質問のアクティビティでは、アプリ全体が終了します。

したがって、問題はアクティビティを終了するコードではなく、アクティビティ自体にあるようです。

4

19 に答える 19

223

開始する前にfinish()メソッドを呼び出していると思います。MainActivitySettingsActivity

説明したシナリオは、次の2つの方法で発生します。

また

戻るキーを押すと自動的に発生する内部を設定しandroid:noHistory = "true"ました。MainActivityAndroidManifest.xmlMainActivityfinish

また

'SettingsActivity'に切り替える前に、を呼び出しfinish()MainActivity、それを強制終了します。戻るボタンを押すと、他のアクティビティがスタックに事前設定されていないため、メイン画面に戻ります。

于 2013-03-13T18:50:52.620 に答える
67

実行中のアクティビティでfinish()を呼び出すだけで、前のアクティビティに戻ることができます。finish()呼び出しが実行された後のコードに注意してください。これを修正するには、finish()を呼び出した後にreturnを実行するだけです。

結果をアクティビティ1に戻したい場合は、アクティビティ2を開始するときに次のものが必要です。

startActivityForResults(myIntent, MY_REQUEST_CODE);

呼び出されたアクティビティ内で、onCreate()パラメーターからインテントを取得するか、使用することができます

getIntent();

結果をアクティビティ1に返し、次にアクティビティ2で返すように設定するには

setResult(Activity.RESULT_OK, MyIntentToReturn);

戻るつもりがない場合は、

setResult(Activity.RESULT_OK);

アクティビティの結果が悪い場合は、Activity.RESULT_CANCELEDを使用できます(これはデフォルトで使用されます)。次に、アクティビティ1で実行します

onActivityResult(int requestCode, int resultCode, Intent data) {
    // Handle the logic for the requestCode, resultCode and data returned...
}

アクティビティ2を終了するには、結果がすでに設定されている上記のfinish()で同じメソッドを使用します。

于 2013-03-13T19:39:22.943 に答える
17

フラグメントを使用する場合は、uを使用する必要があります

getActivity().onBackPressed();

単一のアクティビティを使用する場合、uは使用できます

finish();
于 2014-12-02T18:00:23.640 に答える
16

ボタンをクリックすると、次のように呼び出すことができます。

super.onBackPressed();
于 2013-03-13T19:21:50.197 に答える
10

あなたの2番目の活動はおそらく子供の活動としてのあなたの主な活動とは関係がないと思います。AndroidManifest.xmlファイルをチェックして<activity>、子アクティビティのエントリにandroid:parentActivityName属性が含まれているかどうかを確認してください。次のようになります。

<?xml ...?>
...
<activity
    android:name=".MainActivity"
    ...>
</activity>
<activity
    android:name=".ChildActivity"
    android:parentActivityName=".MainActivity"
    ...>
</activity>
...
于 2016-05-04T21:45:12.617 に答える
9

代わりにこのコードを試してくださいfinish

onBackPressed();

于 2014-09-15T10:22:27.037 に答える
7
Button edit = (Button) view.findViewById(R.id.yourButton);
edit.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View view) {
        Intent intent = new Intent(this, YourMainActivity.class);
        startActivity(intent);
        finish();
    }
});
于 2013-03-13T18:54:12.460 に答える
5

これにより、アプリケーション全体が閉じます。

this.finish();
于 2013-03-13T19:01:23.803 に答える
4

あなたはこれを難しくしすぎています。あなたが正しくやろうとしていることを理解していれば、組み込みの「戻る」ボタンとAndroid自体がすべての作業を行います:http ://developer.android.com/guide/components/tasks-and-back- stack.html

また、カスタムの「戻る」ボタンを実装すると、コアアプリ品質ガイドラインUX-N1に違反します:http://developer.android.com/distribute/googleplay/quality/core.html

于 2013-03-13T19:19:22.930 に答える
2

これが役立つかどうかはわかりませんが、同じ問題に苦しんでいて、グローバルブール変数とonResume()アクションだけを使用する非常に簡単な方法を見つけました。私の場合、アクティビティCで特定のボタンをクリックすると、アクティビティBのfinish()がトリガーされます。

Activity_A-> Activity_B-> Activity_C

Activity_A(通常はActivity_Bを開きます)

Activity_B(ボタンをクリックするとActivity_Cが開きます):

// Global:
boolean its_detail = false;
// -------
SharedPreferences prefs =  getApplicationContext().getSharedPreferences("sharedpreferences", 0);
boolean v = prefs.getBoolean("select_client", false);

its_detail = v;

startActivity(C);

@Override
public void onResume(){
     super.onResume();
     if(its_detail == true){
        finish();
     }
}

したがって、アクティビティCのボタンをクリックすると、アクティビティBの「onResume()」関数が実行され、アクティビティAに戻ります。

于 2013-10-17T13:45:09.767 に答える
2
 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

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

        return super.onOptionsItemSelected(item);
    }

これを試してみてください。ツールバーの戻るボタンハードウェアの戻るボタンの両方で機能します。

于 2017-07-30T14:21:33.247 に答える
2

Finishはアプリケーション全体を閉じます。これは、Android開発で嫌いなものであり、finishではありませんが、正常な構文に追いついていないことです。

startActivity(intent)

なぜだめですか

closeActivity(intent)?

于 2017-08-23T11:09:20.333 に答える
2

非常によく似た状況に遭遇しました。

アクティビティ1(オープニング)->アクティビティ2(プレビュー)->アクティビティ3(詳細)

誤った「バックプレス時」の応答

  • アクティビティ3でデバイスをバックプレスすると、アクティビティ2も閉じます。

上記のすべての回答を確認しましたが、いずれも機能しませんでした。アクティビティ2とアクティビティ3の間の遷移のJava構文が正しいことが確認されました。

サードパーティのアプリを呼び出す際のコーディングから新鮮です。アクティビティによる。構成角度を調査することにしました。最終的には、問題の根本原因を特定できるようになりました。

スコープ:アクティビティ2(呼び出し元)の構成。

根本原因

android:launchMode="singleInstance"

解決策

android:launchMode="singleTask"

どうやらこの「バックプレス」の問題では、 singleInstanceは、呼び出されたアクティビティを呼び出し元のアクティビティとともに1つのインスタンスで考慮しますが、singleTaskは、意図されたバックプレスが正常に機能するのに十分な独自のIDを持つ呼び出されたアクティビティを許可します。

于 2018-06-06T03:26:21.697 に答える
2

アクティビティのonCreateメソッドで、次のコードを記述します。

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

次に、アクティビティのonOptionsItemで選択されたメソッドを次のようにオーバーライドします

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

そして、あなたは行ってもいいです。

于 2019-05-20T02:28:37.963 に答える
1

あなたがその機能で他のことをしているのでない限り、あなたを呼び出さないでfinish()ください。そうすれば、あなたの中であなたMainActivityを上書きする必要がなくなります。この戻るボタンの「必要性」を感じた場合は、を呼び出すだけで、呼び出していない限り、に移動できます。onBackPressed()SecondActivityfinish()SecondActivityMainActivityfinish()

于 2013-03-13T18:50:07.930 に答える
1

finish()を呼び出している可能性があります。クリックボタンイベントでは、ボタンをクリックした直後にメインアクティビティが閉じられ、次のアクティビティから戻ると、メインアクティビティはすでに閉じられており、アクティブなアクティビティがないため、アプリケーションは終了します。

于 2016-01-24T17:35:39.377 に答える
1

MainActivityでこれを使用する必要があります

 Intent intent = new Intent(context , yourActivity);

            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
            context.startActivity(intent);

フラグは、MainActivityを維持する複数のタスクを開始します。finishを呼び出すと、他のアクティビティが強制終了され、MainActivityに戻ります。

于 2020-06-09T07:48:13.477 に答える
1

上記の答えのどれも役に立たなかった場合、私はこれが誰かを助けるかもしれないと思います。

組み込みの戻るボタンまたはカスタムの戻るボタンを押しているときにも同じ問題が発生し、アプリは前のアクティビティに戻らずに閉じます。

最初のアクティビティのツールバーから2番目のアクティビティを呼び出していました。

しかし、スターターアクティビティでは、これを次のように呼んでいました。

case android.R.id.home:
            if (isActionMode) {
                clearSelectingToolbar();
                adapter.notifyDataSetChanged();
            } else {
                onBackPressed(); // This was making the activity to finish 
            }
            break;

そして、アクティビティを開始するためのこのコード

 case R.id.settings:
            context.startActivity(new Intent(ShowAllDirectoriesActivity.this, SettingsActivity.class));

'case android.R.id.home'の部分を削除した後、私のアクティビティは通常のフローで実行できました。つまり、前のアクティビティに戻ります。

だから、あなたも同じものを使っているかどうかそれをチェックしてください!

于 2021-10-12T05:31:19.690 に答える
0
{ getApplicationContext.finish();   }

この方法を試してください。

于 2015-03-17T18:00:09.237 に答える