如何关闭活动和回到以前的活动在机器人

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

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

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

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

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

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

编辑

事实上,我的手机的后退按钮也关闭了我的整个应用程序,导致我认为,我已经开始了第二个活动不正确?


我一直在找,

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

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

在主要问题中提到的活动只是退出了我的整个应用程序。

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

513268 次浏览

只是不要在你的 MainActivity上调用 finish(),这样就消除了在你的 SecondActivity上覆盖你的 onBackPressed()的需要,除非你在这个函数中做其他的事情。如果你觉得“需要”这个返回按钮,然后你可以简单地调用 finish()SecondActivity,这将带你到你的 MainActivity,只要你没有调用 finish()

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

您所描述的场景将以下列两种方式出现:

都不是

您已经设置 AndroidManifest.xml内的 MainActivityandroid:noHistory = "true",这导致 MainActivityfinish自动按下后面的关键。

或者

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

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

你把事情弄得太复杂了。如果我知道你正在尝试正确地做什么,内置的‘ back’按钮和 Android 本身将为你做所有的工作: http://developer.android.com/guide/components/tasks-and-back-stack.html

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

当你点击你的按钮,你可以让它调用:

super.onBackPressed();

只需在所在的活动中调用 Finish () ,就可以返回到上一个活动。请注意,Finish ()调用之后的任何代码都将运行-您可以在调用 Finish ()之后执行返回来修复这个问题。

如果你想把结果返回到活动1,那么当开始活动2时,你需要:

startActivityForResults(myIntent, MY_REQUEST_CODE);

在所调用的活动内部,然后可以从 onCreate ()参数或 used 获取 Inent

getIntent();

设置返回结果到活动一,然后在活动二做

setResult(Activity.RESULT_OK, MyIntentToReturn);

如果你没打算回来,那就说

setResult(Activity.RESULT_OK);

如果活动有不好的结果,您可以使用 Activity.Results T _ CANCELED (默认情况下使用此选项)。然后在第一个活动中你做

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

为了完成活动2,使用上面描述的具有结果已经设置的 Finish ()的相同方法。

我不知道这是否有用,但我挣扎在同样的问题,我发现了一个非常简单的方法,只有一个全局布尔变量和 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:

onBackPressed();

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

getActivity().onBackPressed();

如果你使用单一的活动,你可以使用

finish();
{ getApplicationContext.finish();   }

试试这个方法。

可能你正在调用 Finish () ; 在单击按钮事件中,所以主活动在你单击按钮之后关闭,当你从下一个活动返回时,应用程序退出,因为主活动已经关闭,没有活动。

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

<?xml ...?>
...
<activity
android:name=".MainActivity"
...>
</activity>
<activity
android:name=".ChildActivity"
android:parentActivityName=".MainActivity"
...>
</activity>
...
 @Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();


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


return super.onOptionsItemSelected(item);
}

试试这个它的工作都作为 硬件后退按钮工具栏后按钮工具栏后按钮

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

startActivity(intent)

为什么不呢

封闭活动(意图) ?

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

活动一(开放)-> 活动二(预览)-> 活动三(详情)

不正确的回复

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

我检查了上面所有的答案,没有一个有效。用于活动2和活动3之间转换的 Java 语法被认为是正确的。

刚刚编写完第三方应用程序。活动。我们决定调查配置角度——最终使我们能够确定问题的根本原因。

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

根本原因 :

android:launchMode="singleInstance"

解决方案 :

android:launchMode="singleTask"

显然,在这个“ on back press”问题上,SingleInstance认为在一个具有调用 Activity 的实例中调用了 Activity,而 SingleTask允许被调用的 Activity 拥有自己的标识,足以让预期的 on back press 按照应该的方式工作。

创建你活动的方法 编写以下代码。

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

你可以走了。

你必须在你的主要活动中使用它

 Intent intent = new Intent(context , yourActivity);


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

该标志将启动多个任务,这些任务将保留 MainActivity,当您调用 Finish 时,它将终止其他活动并将您返回 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));

删除“ case android.rid.home”部分后,我的活动能够在正常流程中执行,即返回到上一个活动。

因此,检查它,如果你也使用相同的东西!