Android的onBackPressed()方法如何在未明确在MainActivity中调用的情况下调用?
onBackPressed()
方法被调用时,我不得不在onCreate()
方法内写入onBackPressed();
。我知道这个方法是有效的,因为当我注释掉它的时候,它的效果就被删除了(即,即使其他活动被调用,也会从MainActivity中退出程序)。Android的onBackPressed()方法如何在未明确在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));
}
});
}
}
看到上面的方法声明的小注释@Override
?这是一种方便的方式来跟踪从超类继承10的方法。这意味着MainActivity
的超类Activity
也有一个名为OnBackPressed()
的方法。
现在,根据面向对象的编程设计,行为和所共有所有活动,在Activity
类被实现为(或至少所定义的)的属性。由于您可以在任何活动中按下后退按钮,因此该方法是抽象为至Activity
类。 Android操作系统会为您调用此方法,因此每次按下后退按钮时都不必亲自操作。这不是很好吗?所以基本上,你可以有两个类从Activity
继承onBackPressed()
,但让他们执行不同的代码。这被称为polymorphism。
有关继承的更多信息here。
调用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
}
一个简单而直接的答案:
阅读下面这行说
public class MainActivity extends ActionBarActivity{
你主活动延伸法ionBarActivity。
每当一个类扩展另一个类时,它会继承父类的所有内容(在这种情况下,ActionBarActivity就是您的父类)。
如果按下控件并单击ActionBarActivity,它将带您进入该类,您可以看到其中实现的方法。如果继续向上,您会发现onBackPressed()
在层次结构的某处实施。
因此,默认情况下,当您扩展活动时,活动类正在实施onBackPressed()
。您可以通过重写它改变这个函数的行为,如:
@Override
OnBackPressed() {...}
要了解更多关于继承和压倒一切的,我建议你把这个读:
https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
onBackPressed被称为当用户按下后面的键。这个调用是由框架完成的。 '我知道这个方法有效,因为当我将它注释掉时,它的效果就被删除了(即,即使其他活动被调用,也会从MainActivity中退出程序)。另外,如果我输入onBackPressed();进入MainActivity,那么它将无法工作“完全不清楚。 – Kishore
提供的所有答案都非常有意义。感谢你们!!! –