在我的应用程序中,有一个注销功能。如果用户点击注销,则会进入主屏幕。现在我通过按返回按钮退出我的应用程序。但是我想要的是像返回按钮功能一样自动退出(即以编程方式)。我知道调用finish()会实现此功能。但问题是它会回到上一个活动。
在我的应用程序中,有一个注销功能。如果用户点击注销,则会进入主屏幕。现在我通过按返回按钮退出我的应用程序。但是我想要的是像返回按钮功能一样自动退出(即以编程方式)。我知道调用finish()会实现此功能。但问题是它会回到上一个活动。
onBackPressed()
自API Level 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();
}
getActivity().getFragmentManager().popBackStack();
。 - Tarun你不需要覆盖 onBackPressed()
- 它已经被定义为当用户按下返回按钮时,你的活动将默认执行的操作。因此,每当你想要 "程序化地按下" 返回按钮时,只需调用 onBackPressed()
。
然而,这只会导致 finish()
被调用 ;)
我认为你对返回按钮的作用感到困惑了。默认情况下,它只是调用 finish()
,因此仅退出当前活动。如果在该活动后面有其他东西,那个屏幕就会显示出来。
当从登录中启动您的活动时,您可以添加一个 CLEAR_TOP 标志,这样当你退出时,登录活动就不会存在。
onBackPressed
方法后,调用它。onBackPressed();
,或者如果您正在使用片段,则可以使用getActivity().onBackPressed()
。public void onBackPressed() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
// 确保在 onCreate 方法之外使用
只需在您的第一个类(登录活动)的onPause();方法中添加finish();
即可。就这样
对于使用 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"
添加的片段,显示屏幕上的前一个。
intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent1); - vinothp