我有一个主要活动,当我点击一个按钮,启动一个新活动时,我使用以下代码来执行此操作:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
上面的代码是从主要活动运行的 .
现在,在我的主要活动调用的新活动中,我有一个后退按钮 . 当我点击这个后退按钮时,我希望我的新活动关闭,它必须回到原来的主要活动 .
我试过调用 super.finish()
和 finish()
(来自新活动),但这会关闭我的整个应用程序(包括我的主要活动) .
如何关闭当前关注的活动,然后返回主活动?
EDITED
我的手机的后退按钮也关闭了我的整个应用程序的事实,让我认为我已经错误地启动了第二个活动?
好的,我一直在寻找,
我创建了一个设置活动,它使用相同的清单代码和相同的代码来启动活动 .
对于按下后退按钮时的设置,它将返回主活动 .
通过上面在主要问题中提到的活动,它只是退出我的整个应用程序 .
所以问题似乎不是完成活动的代码,而是活动本身 .
16 回答
如果你使用片段你应该使用
如果您使用单一活动,您可以使用
我认为你在启动
SettingsActivity
之前在MainActivity
中调用finish()
方法 .您描述的方案将以下列两种方式发生:
无论是
您已在
AndroidManifest.xml
内为MainActivity
设置android:noHistory = "true"
,这会在按后退键时自动导致MainActivity
到finish
.要么
在切换到'SettingsActivity'之前,您已经在
MainActivity
中调用了finish()
,这会导致它被杀死 . 当您按下后退按钮时,由于没有其他活动预设在堆栈中弹出,它会返回主屏幕 .只需在您所在的活动中调用finish()即可返回上一个活动 . 注意在finish()调用之后的任何代码都会运行 - 你可以在调用finish()之后再做一个返回来修复它 .
如果要将结果返回到活动1,那么在启动活动2时,您需要:
在被调用的活动中,您可以从onCreate()参数获取Intent或使用它
要将结果设置为活动1,然后在活动2中设置
如果您无意返回,那就说吧
如果活动结果不佳,您可以使用Activity.RESULT_CANCELED(默认情况下使用) . 然后在活动一中你做
要完成活动,请使用与上述finish()相同的方法,并已设置结果 .
尝试此代码而不是
finish
:onBackPressed();
你这太难了 . 如果我理解您正在尝试正确执行的操作,内置的'back'按钮和Android本身将为您完成所有工作:http://developer.android.com/guide/components/tasks-and-back-stack.html
此外,实现自定义"back"按钮违反了Core App质量指南UX-N1:http://developer.android.com/distribute/googleplay/quality/core.html
试试这个它在 toolbar back button 上同时适用于 hardware back button .
完成关闭整个应用程序,这是我讨厌在Android开发中没有完成的东西很好,但他们没有跟上他们有的语法
为什么不
试试这个方法..
我不知道这是否有用,但我遇到了同样的问题,我找到了一个非常简单的方法,只有一个全局布尔变量和onResume()动作 . 在我的情况下,我的活动C如果点击一个特定的按钮它应该触发活动B的完成()!
Activity_A - > Activity_B - > Activity_C
Activity_A(通常打开Activity_B)
Activity_B(在某些按钮上单击打开Activity_C):
因此,每当我单击活动C上的按钮时,它将执行活动B的“onResume()”功能并返回活动A.
我们遇到了非常类似的情况 .
错误的“背面按下”响应
我检查了上面发布的所有答案,但没有一个有效 . 审核了活动2和活动3之间转换的Java语法是正确的 .
从编码调出第三方应用程序新鲜 . 通过活动 . 我们决定调查配置角度 - 最终使我们能够确定问题的根本原因 .
Scope :活动2的配置(来电者) .
Root Cause :
Solution :
显然在这个"on back press"问题上,singleInstance在一个实例中使用调用Activity来调用被调用的活动,而singleTask将允许被调用的具有自己的身份的活动,这些活动足以使预期的后退功能按预期工作 .
这将关闭整个应用程序:
我相信你的第二个活动可能与您作为儿童活动的主要活动无关 . 检查
AndroidManifest.xml
文件,查看子活动的<activity>
条目是否包含android:parentActivityName
属性 . 它应该看起来像这样:你可能正在调用finish();在单击按钮事件中,所以主要活动在您单击按钮后立即关闭,当您从下一个活动返回时,应用程序将退出,因为主要活动已关闭且没有活动活动 .
当您单击按钮时,可以调用它:
只是不要在
MainActivity
上调用finish()
,这样就不需要在_391131中覆盖你的onBackPressed()
,除非你在该函数中做其他事情 . 如果您觉得这个后退按钮的"need",那么您只需在SecondActivity
上调用finish()
,只要您没有在其上调用finish()
,就会将您带到MainActivity