【发布时间】:2012-01-10 06:44:01
【问题描述】:
当我按下设备的后退按钮时,我想进入主屏幕。我正在使用此代码..
public void onBackPressed() {
this.finish();
return;
}
【问题讨论】:
-
这段代码遇到了什么问题?
标签: android
当我按下设备的后退按钮时,我想进入主屏幕。我正在使用此代码..
public void onBackPressed() {
this.finish();
return;
}
【问题讨论】:
标签: android
按 BACK 键将有效地为您呼叫finish()。无需捕获 BACK 键。
我假设您的问题是,当您按下 BACK 键时,它只是回到您应用中的前一个 Activity。
如果是这种情况,那么当所有活动在您的应用中启动新的Activity 时,让它们“自行终止”......
startActivity(new Intent(this, MyNewActivity.class));
finish();
如果您这样做,那么当您按 BACK 时将不会返回到 Activity,并且它将始终返回到主屏幕。
【讨论】:
你可以试试这个
@Override
public void onBackPressed() {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
【讨论】:
你应该重写finish()
@Override
public void finish() {
System.out.println("finish activity");
SaveData();
System.runFinalizersOnExit(true) ;
super.finish();
android.os.Process.killProcess(android.os.Process.myPid());
}
然后像这样调用这个方法:
@Override
public void onBackPressed() {
this.finish();
}
【讨论】:
好的,要启动设备的主屏幕,请在 onKeyDown() 中使用此代码
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
如果您想关闭您的应用程序,那么我认为您必须通过finish() 以某种方式(某种标准方式)或使用来关闭您的所有活动
android.os.Process.killProcess(android.os.Process.myPid()) 这个代码会杀死你的应用程序。
(一些丑陋的方式..!)
【讨论】:
当您致电 NewAcitivy 时,请致电 finish()。在 startActivity 之后,之前的活动将被关闭。
然后使用
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
【讨论】:
你可以试试这个:
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode==KeyEvent.KEYCODE_BACK){
this.finish ();
}
return true;
}
【讨论】:
你想覆盖 OnkeyDown 并完成活动
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
【讨论】:
简单的方法是在您移动到下一个活动时完成当前活动。
只需在 startActivity() 之后执行 finish(),然后在任何活动的后按时,您只需调用 finish() 即可退出应用程序,因为堆栈中不存在所有其他活动。
【讨论】:
你可以从任何地方关闭应用程序来调用这种类型的 Intent:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
这是在任何点击事件中从任何地方关闭应用程序的最佳方式
【讨论】:
您需要使用标志启动意图以清除实际活动之上的活动。
public void onBackPressed() {
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
this.startActivity(intent);
this.finish();
}
【讨论】:
引自官方Guideline
FLAG_ACTIVITY_CLEAR_TOP
如果设置,并且正在启动的活动已经在 当前任务,而不是启动该任务的新实例 活动,除此之外的所有其他活动都将关闭,并且 此 Intent 将作为 新意图。
FLAG_ACTIVITY_CLEAR_TASK
如果在传递给 Context.startActivity() 的 Intent 中设置,此标志将 导致与活动相关联的任何现有任务 在活动开始之前被清除。也就是活动 成为一个空任务的新根,任何旧的 活动结束。这只能与 FLAG_ACTIVITY_NEW_TASK。
FLAG_ACTIVITY_NO_HISTORY
如果设置,新活动不会保存在历史堆栈中。立刻 用户离开它,活动就完成了。这可能 也可以使用 noHistory 属性设置。
FLAG_ACTIVITY_NEW_TASK
如果设置,此活动将成为此活动的新任务的开始 历史堆栈。
@Override
public void onBackPressed()
{
Intent intCloseApp = new Intent(Intent.ACTION_MAIN);
intCloseApp.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intCloseApp.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intCloseApp.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intCloseApp.addCategory(Intent.CATEGORY_HOME);
intCloseApp.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intCloseApp);
}
【讨论】:
public void onBackPressed() {
System.exit(1);
return;
}
残酷的方式
【讨论】: