我有一个主要活动,当我点击一个按钮,开始一个新活动时,我使用以下代码来执行此操作:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
以上代码是从主要活动开始的。
现在在主要活动调用的新活动中,我有一个后退按钮。 当我点击这个后退按钮时,我希望我的新活动关闭,它必须回到原来的主要活动。
我尝试过调用super.finish()
,只调用finish()
(来自新活动),但这会关闭我的整个应用程序(包括我的主要活动)。
如何关闭当前焦点的活动,然后返回主活动?
EDITED
我的手机的后退按钮也会关闭我的整个应用程序这一事实让我觉得我已经错误地启动了第二项活动?
好的,我一直在寻找,
我创建了一个设置活动,它使用相同的清单代码和相同的代码来启动活动。
对于按下后退按钮时的设置活动,它将返回主活动。
通过主要问题中的上述活动,它只会退出我的整个应用程序。
所以问题似乎不在于完成活动的代码,而是活动本身。
答案 0 :(得分:178)
我认为您在开始finish()
之前在MainActivity
中调用了SettingsActivity
方法。
您所描述的方案将以下列两种方式发生:
EITHER
您已在android:noHistory = "true"
内为MainActivity
设置了AndroidManifest.xml
,这会在按下后退键时自动MainActivity
finish
。
OR
在切换到“我的设置活动”之前,您已在finish()
中调用了MainActivity
,这会将其取消。当您按下后退按钮时,由于没有预设堆叠中的其他活动弹出,它将返回主屏幕。
答案 1 :(得分:54)
您只需在您所在的活动中调用finish()即可返回上一个活动。注意finish()调用之后的任何代码都会运行 - 你可以在调用finish()之后再做一次返回来修复它。
如果您想将结果返回到活动1,那么在启动活动2时,您需要:
startActivityForResults(myIntent, MY_REQUEST_CODE);
在被调用的活动中,您可以从onCreate()参数获取Intent或使用
getIntent();
要将结果设置为活动1,然后将活动二返回
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...
}
要完成活动2,请使用与上述finish()相同的方法,并将结果设置好。
答案 2 :(得分:14)
当您点击按钮时,可以打电话:
super.onBackPressed();
答案 3 :(得分:9)
如果您使用片段,则应使用
getActivity().onBackPressed();
如果你使用单一活动,你可以使用
finish();
答案 4 :(得分:5)
这将关闭整个应用程序:
this.finish();
答案 5 :(得分:5)
尝试使用此代码而不是finish
:
onBackPressed();
答案 6 :(得分:4)
你这太难了。如果我理解您要正确执行的操作,内置的“后退”按钮和Android本身将为您完成所有工作:http://developer.android.com/guide/components/tasks-and-back-stack.html
此外,实施自定义“后退”按钮违反了核心应用程序质量指南UX-N1:http://developer.android.com/distribute/googleplay/quality/core.html
答案 7 :(得分:4)
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();
}
});
答案 8 :(得分:2)
我认为您的第二项活动可能与您作为儿童活动的主要活动无关。检查您的AndroidManifest.xml
文件,看看您的子活动的<activity>
条目是否包含android:parentActivityName
属性。看起来应该是这样的:
<?xml ...?>
...
<activity
android:name=".MainActivity"
...>
</activity>
<activity
android:name=".ChildActivity"
android:parentActivityName=".MainActivity"
...>
</activity>
...
答案 9 :(得分:1)
我不知道这是否有用,但我遇到了同样的问题,我发现了一个非常简单的方法,只有一个全局布尔变量和onResume()动作。在我的情况下,我的活动C如果点击一个特定的按钮,它应该触发活动B的完成()!
Activity_A - &gt; Activity_B - &gt; 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.
答案 10 :(得分:1)
请不要在finish()
上致电MainActivity
,这样就无需覆盖onBackPressed()
中的SecondActivity
,除非您在该功能中执行其他操作。如果您觉得这个后退按钮“需要”,那么您只需拨打finish()
上的SecondActivity
即可,只要您没有拨打{MainActivity
,就会转到finish()
1}}就可以了
答案 11 :(得分:1)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if ( id == android.R.id.home ) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
尝试使用工具栏后退按钮作为硬件后退按钮。
答案 12 :(得分:1)
我们遇到了非常类似的情况。
活动1(开幕) - &gt;活动2(预览) - &gt;活动3(细节)
错误&#34;在背压&#34;回应
我检查了上面发布的所有答案,但没有一个有效。审核了活动2和活动3之间转换的Java语法是正确的。
从调用第三方应用程序的编码开始。通过活动。我们决定调查配置角度 - 最终使我们能够确定问题的根本原因。
范围:活动2(来电者)的配置。
根本原因:
android:launchMode="singleInstance"
<强>解决方案强>:
android:launchMode="singleTask"
显然在这个&#34;背面按下&#34;问题 singleInstance 在一个实例中使用调用Activity考虑调用的活动,而 singleTask 将允许调用的活动具有足够的自己的身份,以便按下预期的工作作为它应该。
答案 13 :(得分:0)
{ getApplicationContext.finish(); }
尝试这种方法..
答案 14 :(得分:0)
你可能正在调用finish();在单击按钮事件中,所以主要活动在您单击按钮后关闭,当您从下一个活动返回时,应用程序将退出,因为主要活动已经关闭且没有活动活动。
答案 15 :(得分:0)
完成关闭整个应用程序,这是我讨厌在Android开发中没有完成的东西很好,但是他们没有跟上他们有的语法
startActivity(intent)
为什么不
closeActivity(意图) ?
答案 16 :(得分:0)
关于活动的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);
}
你很好。
答案 17 :(得分:0)
您必须在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