在我的应用中,我有退出功能。如果用户单击注销,则会转到主屏幕。现在我按退回按钮退出我的应用程序。但我想要的是我需要像后退按钮功能一样自动退出(即以编程方式)。我知道通过调用finish()将完成功能。但问题在于之前的活动。
答案 0 :(得分:114)
onBackPressed()
自:API级别5
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
onBackPressed();
}
}
@Override
public void onBackPressed() {
//this is only needed if you have specific things
//that you want to do when the user presses the back button.
/* your specific things...*/
super.onBackPressed();
}
答案 1 :(得分:38)
您无需覆盖onBackPressed()
- 它已被定义为当用户按下后退按钮时您的活动默认执行的操作。因此,只要您想“以编程方式按下”后退按钮,就可以致电onBackPressed()
。
这只会导致调用finish()
;)
我认为你对后退按钮的作用感到困惑。默认情况下,它只是对finish()
的调用,因此它只退出当前活动。如果您在该活动后面有某些内容,则会显示该屏幕。
您可以做的是从登录中启动您的活动时,添加一个CLEAR_TOP标志,以便当您退出时不会出现登录活动。
答案 2 :(得分:8)
有时候覆盖方法onBackPressed()是有用的,因为如果你使用片段而你在它们之间进行更改,如果你按下后退按钮它们会返回到前一个片段。
答案 3 :(得分:5)
在您的活动中覆盖{@ 1}后调用onBackPressed
。
答案 4 :(得分:1)
您可以简单地使用onBackPressed();
或者如果您正在使用片段,则可以使用getActivity()。onBackPressed()
答案 5 :(得分:0)
只需添加finish();在您的第一堂课(登录活动)中onPause();方法。就这样
答案 6 :(得分:0)
对于 Kotlin 用户和使用片段:
如果您在活动中导航,请使用 finish()
,但对于片段,您可以通过片段标签移除片段。
导航到片段时使用:
myFragment = myFragment(this)
parentFragmentManager.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
.add(R.id.baseFragmentContainer, myFragment, "MYFRAGMENT")
.addToBackStack("myFragmentNameInStack")
.commit()
然后,当点击您的特定按钮并模拟按下“后退按钮”时,请执行以下操作:
binding.someButton.setOnClickListener {
activity?.supportFragmentManager?.
popBackStack("myFragmentNameInStack", FragmentManager.POP_BACK_STACK_INCLUSIVE)
}
这将删除由标签 "myFragmentNameInStack"
添加的片段,在屏幕上显示前一个片段。