2

我在我的应用程序中的几个地方使用了 onBackPressed() 方法。在每个地方,我都希望这种方法可以做其他事情。当用户在 X 布局中时,我想后退按钮在 Y 布局中执行其他操作,所以我认为最好的解决方案是在 onBackPressed 方法中使用参数。例如在 X onBackPressed(0); 在 Y onBackPressed(1); 等等

@Override
public void onBackPressed(int c){
    if(c==0)Toast.makeText(getApplicationContext(), "This is X", Toast.LENGTH_SHORT).show();
    if (c==1)Toast.makeText(getApplicationContext(), "This is Y", Toast.LENGTH_SHORT).show();
}

但它不起作用。你有什么想法我能做些什么来让它工作吗?或者有没有更好的解决这个问题的方法?

4

3 回答 3

2

您正在覆盖框架方法,并且除了 API 定义的参数之外,您不能向其传递任何其他参数。但是,您可以创建自己的方法来检查您需要的内容,例如:

   @Override
public void onBackPressed(){

    switch(checkLayout()){
 case 1: //do stuff
 break;
 case 2: .....
 }
 }

并且稍微扩展一下 CommonsWare 的评论:是的,用户并不是“处于某种布局中”。用户正在与Activity托管某个布局的某个人进行交互。如果你不是很明白这意味着什么,你可能应该查阅这个文档:http: //developer.android.com/reference/android/app/Activity.html

于 2013-11-05T21:17:23.347 回答
2

Android 中覆盖方法的工作方式是您必须完全复制方法头。当您更改它时,它仍然可以编译,但 Java 会将它作为重载方法读取,因此不会对它做任何事情,因为它永远不会被调用。

在 onBackPressed() 之外处理实例变量,然后在实际按下它时处理它会好得多。

下面是一个简单的实现。

//Your instance variable
boolean myRandomInstanceVariable = true;

@Override
public void onBackPressed()
{
   if(myRandomInstanceVariable)
   {
      //do stuff
   }
   else
   {
      //do other stuff
   }
}
于 2013-11-05T21:18:10.693 回答
0

在您的类中创建一个字段,将其设置为某个地方的某个值,以及某个其他地方的某个其他值。然后onBackPressed()检查该字段的值并相应地进行。

于 2013-11-05T21:16:55.057 回答