如何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)?