如何关闭活动并返回到android中的先前活动

Zap*_*ica 134 android android-activity

我有一个主要的活动,当我点击一个按钮,开始一个新的活动,我使用以下代码来做到这一点:

Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

上面的代码是从主要活动运行的.

现在,在我的主要活动调用的新活动中,我有一个后退按钮.当我点击这个后退按钮时,我希望我的新活动关闭,它必须返回到原始的主要活动.

我已经尝试过调用super.finish()而且只是finish() (来自新活动),但这会关闭我的整个应用程序(包括我的主要活动).

如何关闭当前焦点的活动,然后返回主活动?

EDITED

我的手机的后退按钮也关闭了我的整个应用程序的事实,让我认为我已经错误地启动了第二个活动?


好的,我一直在寻找,

我创建了一个设置活动,它使用相同的清单代码和相同的代码来启动活动.

对于按下后退按钮时的设置活动,它将返回主活动.

通过上面在主要问题中提到的活动,它只是退出我的整个应用程序.

所以问题似乎不是完成活动的代码,而是活动本身.

Aja*_*y S 190

我认为你在开始之前就是在调用finish()方法.MainActivitySettingsActivity

您描述的方案将以下列两种方式发生:

无论是

您已设置android:noHistory = "true"MainActivityAndroidManifest.xml导致MainActivityfinish上按返回键自动.

要么

在切换到"SettingsActivity"之前,你已经打电话给finish()MainActivity,这会杀死它.当您按下后退按钮时,由于没有预设堆叠中的其他活动以弹出,它将返回主屏幕.


jjN*_*ord 56

您可以通过在您所在的活动中调用finish()来返回上一个活动.注意finish()调用之后的任何代码都会运行 - 你可以在调用finish()之后再做一次返回来修复它.

如果要将结果返回到活动1,那么在启动活动2时,您需要:

startActivityForResults(myIntent, MY_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)

在被调用的活动中,您可以从onCreate()参数获取Intent或使用它

getIntent();
Run Code Online (Sandbox Code Playgroud)

要将结果设置为活动1,然后在活动2中设置

setResult(Activity.RESULT_OK, MyIntentToReturn);
Run Code Online (Sandbox Code Playgroud)

如果你无意返回,那就说吧

setResult(Activity.RESULT_OK);
Run Code Online (Sandbox Code Playgroud)

如果活动结果不佳,您可以使用Activity.RESULT_CANCELED(默认情况下使用).然后在活动一中你做

onActivityResult(int requestCode, int resultCode, Intent data) {
    // Handle the logic for the requestCode, resultCode and data returned...
}
Run Code Online (Sandbox Code Playgroud)

要完成活动2,请使用与上述finish()相同的方法,并已设置结果.


Zab*_*dor 14

当您单击按钮时,可以调用它:

super.onBackPressed();
Run Code Online (Sandbox Code Playgroud)


小智 10

如果你使用片段你应该使用

getActivity().onBackPressed();
Run Code Online (Sandbox Code Playgroud)

如果您使用单一活动,您可以使用

finish();
Run Code Online (Sandbox Code Playgroud)


Tre*_*vor 9

我相信您的第二项活动可能与您作为儿童活动的主要活动无关。检查您的AndroidManifest.xml文件,看看<activity>您的子活动的条目是否包含android:parentActivityName属性。它应该是这样的:

<?xml ...?>
...
<activity
    android:name=".MainActivity"
    ...>
</activity>
<activity
    android:name=".ChildActivity"
    android:parentActivityName=".MainActivity"
    ...>
</activity>
...
Run Code Online (Sandbox Code Playgroud)


KEY*_*SAN 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();
    }
});
Run Code Online (Sandbox Code Playgroud)


Log*_*159 6

这将关闭整个应用程序:

this.finish();
Run Code Online (Sandbox Code Playgroud)

  • **不,它不会。** 它仅关闭当前活动。请参阅:https://developer.android.com/reference/android/app/Activity.html#finish() (2认同)

小智 6

尝试此代码而不是finish:

onBackPressed();

  • 从ActivityB返回到ActivityA可以正常工作。对于片段和单个活动,可以使用@Osama Ibrahim的答案。 (2认同)