如何closures活动,并返回到以前在Android的活动

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

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

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

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

我已经尝试调用super.finish() ,刚刚finish() (从新的活动),但是这然后closures我的整个应用程序(包括我的主要活动)。

我怎样才能closures当前关注的活动,然后返回到主要活动?

EDITED

事实上,我的手机的后退button也closures了我的整个应用程序,导致我认为我错误地启动了第二个活动?


好的,我一直在寻找,

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

对于按下后退button时的设置活动,它将返回到主活动。

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

所以这个问题似乎不是用代码完成活动,而是活动本身。

我想你是在启动SettingsActivity之前调用MainActivity finish()方法。

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

无论是

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

要么

在切换到“SettingsActivity”之前,你已经在MainActivity调用了finish() ,这会杀死它。 当您按下返回button时,由于没有其他活动被预置在堆栈中popup,它将返回到主屏幕。

您只需在您所在的活动中调用finish()即可回到之前的活动。 注意finish()调用之后的任何代码都会运行 – 你可以在调用finish()来修复这个问题之后执行返回。

如果您想要将结果返回到活动状态,那么在启动活动两时您需要:

 startActivityForResults(myIntent, MY_REQUEST_CODE); 

在被调用的活动内部,您可以从onCreate()参数获取Intent或使用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... } 

要完成活动,使用与上面描述的finish()相同的方法,并设置结果。

当你点击你的button,你可以打电话:

 super.onBackPressed(); 

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

 getActivity().onBackPressed(); 

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

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

试试这个代码而不是finish

onBackPressed();

这closures了整个应用程序:

 this.finish(); 

只要不要在你的MainActivity上调用finish() ,那么这就消除了在你的SecondActivity覆盖你的onBackPressed() ,除非你在这个函数中做了其他的事情。 如果你觉得这个后退button的“需要”,那么你可以简单地调用SecondActivity上的finish() ,只要你没有调用finish()就可以进入你的MainActivity

你太难了 如果我明白你想要做的是正确的,内置的“后退”button和Android本身将为你做所有的工作: http : //developer.android.com/guide/components/tasks-and-back- stack.html

此外,实施自定义“返回”button违反核心应用程序质量指南UX-N1: http : //developer.android.com/distribute/googleplay/quality/core.html

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

 <?xml ...?> ... <activity android:name=".MainActivity" ...> </activity> <activity android:name=".ChildActivity" android:parentActivityName=".MainActivity" ...> </activity> ... 

我不知道这是否是有用的或不是,但我正在与同样的问题苦苦挣扎,我发现一个非常简单的方法,只有一个全局布尔variables和onResume()的行动。 在我的情况下,我的活动C,如果点击一个特定的button,它应该触发活动B的完成()!

Activity_A – > Activity_B – > Activity_C

Activity_A(正常打开Activity_B)

Activity_B(点击某个button,打开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(); } } 

所以,只要我点击Activity C上的button,它就会执行Activity B的“onResume()”function,并返回到Activity A.

 { getApplicationContext.finish(); } 

试试这个方法..

可能你正在调用finish(); 在点击button事件中,主活动在你点击button之后closures,当你从下一个活动返回时,应用程序退出,因为主活动已经closures,并且没有活动活动。

  @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if ( id == android.R.id.home ) { finish(); return true; } return super.onOptionsItemSelected(item); } 

试试这个工具在后退button上作为硬件后退button

完成closures整个应用程序,这是我讨厌在Android开发没有完成是好的,但他们不保持智慧语法他们有

 startActivity(intent) 

为什么不

closeActivity(intent)?