调用onBackPressed()
方法,而不必在onBackPressed();
方法中编写onCreate()
。我知道这个方法有效,因为当我将它注释掉时,它的效果被删除(即使调用了其他活动,也会从MainActivity中退出程序)。
另外,如果我将onBackPressed();
输入到MainActivity中,那么它将无效。我真的很困惑为什么onBackPressed()
方法无法调用方法。对不起,如果我没有正确地说出问题,我希望我做到了!并提前感谢!!
public class MainActivity extends ActionBarActivity{
private Button button;
private Button button2;
private ImageView im;
private ImageView im2;
private boolean doubleBackToExitPressedOnce = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
}
@Override
public void onBackPressed(){
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
public void changeColor() {
button = (Button) findViewById(R.id.button);
im = (ImageView) findViewById(R.id.imageView2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
im.setBackgroundColor(Color.rgb(255,255,255));
}
});
}
}
答案 0 :(得分:2)
在方法声明上方看到那个小@Override
注释?这是跟踪超类中继承的方法的便捷方法。这意味着MainActivity
的超类Activity
也有一个名为OnBackPressed()
的方法。
现在,根据面向对象编程设计,所有活动所共有的行为和属性,在{{1}中实现(或至少定义) }类。由于您可以在任何活动中按后退按钮,因此该方法抽象到Activity
类。 Android操作系统会为您调用此方法,因此每次按下后退按钮时您都不必自己操作。难道不是很好吗?基本上,您可以让两个类从Activity
继承onBackPressed()
,但让它们执行不同的代码。这称为polymorphism。
有关继承here的更多信息。
答案 1 :(得分:1)
调用onBackPressed()方法而不必编写onBackPressed();在onCreate()方法中。
第一部分......
当活动检测到用户按下后退键时调用。默认实现只是完成当前活动,但您可以覆盖它以执行任何操作。
所以这是的简单版本"为什么"当你自己不实现它时它仍会运行。
第二部分......
我不确定你为什么要在onCreate()
另外,如果我输入onBackPressed();进入MainActivity,然后它将无法正常工作。
它将如何编程使其工作。
你有......
@Override
public void onBackPressed(){
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
所以你没有调用它的super方法,这就是为什么它没有像你期望的那样关闭。
要解决此问题,请调用方法
@Override
public void onBackPressed(){
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
super.onBackPressed(); // add this here
}
答案 2 :(得分:0)
一个简单直接的答案:
阅读此行说的内容
public class MainActivity extends ActionBarActivity{
您的主要活动扩展了ActionBarActivity。
每当一个类扩展另一个类时,它都会继承父类中的所有内容(在这种情况下,ActionBarActivity是您的父类)。
如果按下控件并单击ActionBarActivity,它将进入该类,您可以看到其中实现的方法。如果你继续上升,你会发现onBackPressed()
是在层次结构的某个地方实现的。
因此,默认情况下,当您扩展活动时,Activity类正在实现onBackPressed()
。您可以通过覆盖它来更改此函数的行为:
@Override
OnBackPressed() {...}
要了解有关继承和覆盖的更多信息,我建议您阅读:
https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html