是否可以仅在一个活动中重写 onBackPressed()
?
当按下后退按钮时,我想在特定的活动上调用对话框,但是在所有其他活动中,我希望它像以前一样工作(返回到先前的活动)。
编辑
谢谢大家的答案,我已经按照你们告诉我的做了一切,但我的问题是当我在另一个活动中单击“返回”按钮时,我会返回到之前的活动(其中我重写了后退按钮),我认为它没有起作用,我认为它正在覆盖整个应用程序中的onBackPressed()
,现在我明白了。
是否可以仅在一个活动中重写 onBackPressed()
?
当按下后退按钮时,我想在特定的活动上调用对话框,但是在所有其他活动中,我希望它像以前一样工作(返回到先前的活动)。
编辑
谢谢大家的答案,我已经按照你们告诉我的做了一切,但我的问题是当我在另一个活动中单击“返回”按钮时,我会返回到之前的活动(其中我重写了后退按钮),我认为它没有起作用,我认为它正在覆盖整个应用程序中的onBackPressed()
,现在我明白了。
是的。只需要在那个Activity
中进行覆盖
@Override
public void onBackPressed()
{
// code here to show dialog
super.onBackPressed(); // optional depending on your needs
}
不要把这段代码放在任何其他Activity
中
finish()
。然后,活动2将是堆栈中唯一的活动。 - codeMagic按照codeMagic的示例覆盖重写onBackPressed()
方法,并在不希望执行默认操作(结束当前活动)时删除对super.onBackPressed();
方法的调用。
OnBackPressed已弃用。
这里提供Kotlin解决方案:
onBackPressedDispatcher.addCallback(object: OnBackPressedCallback(true) {
/* override back pressing */
override fun handleOnBackPressed() {
//Your code here
}
})
Intent intent = new Intent(ResetPinActivity.this, MenuActivity.class);
startActivity(intent);
finish();
那对我有用。
只需在初始化字段时使用以下代码
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();
}
onBackPressed()
方法,并在其内部显示您的对话框。试一下,它能正常工作
@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();
}
fun Fragment.onBackPressed(
navigateToHomeGraph: () -> Unit
) {
val onBackPressedDispatcher = requireActivity().onBackPressedDispatcher
onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
navigateToHomeGraph()
}
}
)
}
onBackPressed {
findNavController().navigate(R.id.destination_nav_graph)
}
控制音乐的最佳和最通用的方法是创建一个母活动,在其中覆盖startActivity(Intent intent)
- 在其中放置shouldPlay=true
,
和onBackPressed()
- 在其中放置shouldPlay = true
。
onStop
- 在其中放置一个有条件的mediaPlayer.stop,其条件为shouldPlay。
然后,只需将母活动扩展到所有其他活动中,无需重复编写代码。
首先,您必须考虑一下,如果您的活动(我称之为A)扩展了另一个活动(B),并且在这两个活动中,您都想使用onbackpressed函数,则B中的所有代码也会在A中运行。因此,如果您想要将它们分开,您应该将它们分开。这意味着A不应该扩展B,然后您可以为它们每个人单独拥有onbackpressed。