是否可以仅为一个活动覆盖onBackPressed()
?
单击后退按钮,我想调用特定活动的对话框,但在所有其他活动中,我希望它能像以前一样工作(转到以前的活动)。
已编辑
感谢大家的回答,我已经掌握了你告诉我的一切,但我的问题是,当我在另一个"活动"上单击后退按钮时,我要转到我以前的"活动"(后退按钮被覆盖的那个活动),我认为它不起作用,我以为它在整个应用程序中覆盖了onBackPressed()
,现在我得到了它。
是。只在那一个Activity
中用覆盖它
@Override
public void onBackPressed()
{
// code here to show dialog
super.onBackPressed(); // optional depending on your needs
}
不要将此代码放在任何其他Activity
中
根据codeMagic的示例覆盖onBackPressed()
方法,如果不希望执行默认操作(完成当前活动),则删除对super.onBackPressed();
的调用。
您可以只调用onBackPressed(),如果您想在后退按钮后显示一些活动,您可以提到
Intent intent = new Intent(ResetPinActivity.this, MenuActivity.class);
startActivity(intent);
finish();
这对我很有效。
OnBackPressed弃用。
Kotlin解决方案:
onBackPressedDispatcher.addCallback(object: OnBackPressedCallback(true) {
/* override back pressing */
override fun handleOnBackPressed() {
//Your code here
}
})
只需在要显示对话框的活动中调用onBackPressed()
方法,然后在其中显示对话框。
只需使用以下代码初始化字段
private int count = 0;
@Override
public void onBackPressed() {
count++;
if (count >=1) {
/* If count is greater than 1 ,you can either move to the next
activity or just quit. */
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
finish();
overridePendingTransition
(R.anim.push_left_in, R.anim.push_left_out);
/* Quitting */
finishAffinity();
} else {
Toast.makeText(this, "Press back again to Leave!", Toast.LENGTH_SHORT).show();
// resetting the counter in 2s
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
count = 0;
}
}, 2000);
}
super.onBackPressed();
}
控制音乐的最佳和最通用的方法是创建一个母亲活动,在其中覆盖startActivity(Intent intent)
-在其中放入shouldPlay=true
,和onBackPressed()
——在里面放了shouldPlay = true
。onStop
-在其中,您放置了一个条件媒体播放器。stop,并将shouldPlay作为条件
然后,只需将母活动扩展到所有其他活动,就不需要代码复制。
首先你必须考虑,如果你的活动,我称之为A,扩展了另一个活动(B),并且在中
如果你想使用onbackpressed函数,那么你在B中的每一个代码也都在A中运行。所以,如果你想把它们分开,你应该把它们分开。这意味着A不应该扩展B,然后可以分别对它们进行onbackpress。
试试这个它的工作
@Override
public void onBackPressed(){
super.onBackPressed();
Intent i=new Intent(Intent.ACTION_MAIN);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
finish();
}