繁体   English   中英

如何关闭活动和 go 回到 android 中的上一个活动

[英]How to close activity and go back to previous activity in android

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

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

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

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

我试过调用super.finish()finish() (来自新活动),但这会关闭我的整个应用程序(包括我的主要活动)。

我怎样才能关闭当前处于焦点的活动,然后返回到主要活动?

已编辑

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


好的,我一直在寻找,

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

对于设置活动,当我按下后退按钮时,它返回到主要活动。

通过上述主要问题中提到的活动,它只会退出我的整个应用程序。

所以问题似乎不在于完成活动的代码,而在于活动本身。

我认为您在启动SettingsActivity之前在MainActivity中调用了finish()方法。

您描述的场景将通过以下两种方式发生:

任何一个

您已在AndroidManifest.xml中为MainActivity设置了android:noHistory = "true" ,这会导致MainActivity在按下后退键时自动finish

要么

在切换到您的“SettingsActivity”之前,您已经在MainActivity调用了finish() ,这会杀死它。 当您按下返回按钮时,由于堆栈中没有预设其他活动要弹出,它会返回到主屏幕。

您只需在您所在的活动中调用 finish() 即可返回上一个活动。 请注意,finish() 调用之后的任何代码都将运行 - 您只需在调用 finish() 之后返回即可解决此问题。

如果您想将结果返回到活动一,那么在开始活动二时,您需要:

startActivityForResults(myIntent, MY_REQUEST_CODE);

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

getIntent();

要将结果返回到活动一然后在活动二中执行

setResult(Activity.RESULT_OK, MyIntentToReturn);

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

setResult(Activity.RESULT_OK);

如果活动的结果不好,您可以使用 Activity.RESULT_CANCELED(这是默认使用的)。 然后在活动一你做

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

要完成两个活动,请使用与上述相同的方法完成(),并且您的结果已经设置。

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

super.onBackPressed();

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

getActivity().onBackPressed();

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

finish();

试试这个代码而不是finish

onBackPressed();

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

<?xml ...?>
...
<activity
    android:name=".MainActivity"
    ...>
</activity>
<activity
    android:name=".ChildActivity"
    android:parentActivityName=".MainActivity"
    ...>
</activity>
...
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();
    }
});

这将关闭整个应用程序:

this.finish();

你让这太难了。 如果我理解您要正确执行的操作,内置的“后退”按钮和 Android 本身将为您完成所有工作: http : //developer.android.com/guide/components/tasks-and-back-堆栈.html

此外,实现自定义“后退”按钮违反了核心应用质量指南 UX-N1: http : //developer.android.com/distribute/googleplay/quality/core.html

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

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

        return super.onOptionsItemSelected(item);
    }

试试这个,它既适用于工具栏后退按钮,也适用于硬件后退按钮

Finish 关闭整个应用程序,这是我在 Android 开发中讨厌的东西没有完成这很好,但他们没有跟上他们拥有的好的语法

startActivity(intent)

为什么不

关闭活动(意图)?

我们遇到了非常相似的情况。

活动 1(开幕)-> 活动 2(预览)-> 活动 3(详情)

不正确的“后按”响应

  • 设备回按活动 3 也将关闭活动 2。

我已经检查了上面发布的所有答案,但没有一个有效。 用于在 Activity 2 和 Activity 3 之间转换的 Java 语法经过审查是正确的。

刚从编码中调用 3rd 方应用程序。 通过一个活动。 我们决定调查配置角度 - 最终使我们能够确定问题的根本原因。

范围:活动 2(调用方)的配置。

根本原因

android:launchMode="singleInstance"

解决方案

android:launchMode="singleTask"

显然,在这个“背压”问题上, singleInstance将调用的活动与调用 Activity 放在一个实例中,而singleTask将允许调用的活动具有足够的自己的身份,以便预期的背压能够正常工作。

在您的活动的 onCreate 方法上编写以下代码。

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

然后覆盖您的活动的 onOptionsItem selected 方法如下

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

你很高兴去。

只是不调用finish()在您的MainActivity那么这消除了需要重写你的onBackPressed()在你的SecondActivity ,除非你在一个函数做其他的事情。 如果你觉得这个后退按钮“需要”,那么你可以简单地在SecondActivity上调用finish() ,只要你没有在它上面调用finish()就会带你到你的MainActivity

我不知道这是否有用,但我一直在为同样的问题苦苦挣扎,我找到了一个非常简单的方法,只有一个全局布尔变量和 onResume() 操作。 就我而言,如果单击特定按钮,我的活动 C 应触发活动 B 的完成()!

活动_A -> 活动_B -> 活动_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。

您可能正在调用finish(); 在单击按钮事件中,因此在单击按钮后主要活动关闭,当您从下一个活动回来时,应用程序退出,因为主要活动已经关闭并且没有活动活动。

您必须在 MainActivity 中使用它

 Intent intent = new Intent(context , yourActivity);

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

该标志将启动多个任务,这些任务将保留您的 MainActivity,当您调用完成时,它将终止其他活动并让您返回 MainActivity

如果以上答案都没有帮助,我认为这可能会对某人有所帮助。

我在按下内置后退按钮或我的自定义后退按钮时也遇到了同样的问题,应用程序关闭而没有返回到之前的活动。

我从第一个活动的工具栏调用第二个活动。

但在入门活动中,我称之为:

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));

删除“案例 android.R.id.home”部分后,我的活动能够以正常流程执行,即返回到之前的活动。

因此,如果您也在使用相同的东西,请检查一下!

{ getApplicationContext.finish();   }

试试这个方法。。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM