在我的应用程序中,我有一个注销功能。如果用户单击注销,它将转到主屏幕。现在我按返回按钮退出我的应用程序。但我想要的是我需要像后退按钮功能一样自动退出(即以编程方式)。我知道通过调用 finish() 将完成该功能。但问题是它进入了之前的活动。
7 回答
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();
}
您不需要覆盖onBackPressed()
- 它已经定义为您的活动在用户按下后退按钮时默认执行的操作。因此,onBackPressed()
只要您想“以编程方式按下”后退按钮,只需调用即可。
不过,这只会导致finish()
被调用;)
我认为您对后退按钮的作用感到困惑。默认情况下,它只是对 的调用finish()
,因此它只是退出当前活动。如果您在该活动背后有一些东西,则会显示该屏幕。
您可以做的是在从登录启动您的活动时,添加一个 CLEAR_TOP 标志,这样当您退出时登录活动将不存在。
有时覆盖方法 onBackPressed() 很有用,因为如果您使用片段并且如果您按下后退按钮就会在它们之间进行更改,它们会返回到前一个片段。
onBackPressed
在您的活动中覆盖它后调用。
你可以简单地使用 onBackPressed();
或者如果您使用的是片段,您可以使用 getActivity().onBackPressed()
只需添加finish(); 在你的第一堂课'(登录活动) onPause(); 方法。就这样
对于 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)
}
这将删除由 tag 添加的片段"myFragmentNameInStack"
,在屏幕上显示前一个片段。