1

我想在android中的活动之间传递一个或多个变量。一种解决方案是使用全局变量,它是在这里解释: Android global variable 我在这里重复:Android在活动之间传递变量


可以扩展基android.app.Application类并添加成员变量,像这样:

public class MyApplication extends Application { 

private String someVariable; 

public String getSomeVariable() { 
    return someVariable; 
} 

public void setSomeVariable(String someVariable) { 
    this.someVariable = someVariable; 
} 
} 

然后在你的活动,你可以获取和设置变量,像这样:

// set 
((MyApplication) this.getApplication()).setSomeVariable("foo"); 

// get 
String s = ((MyApplication) this.getApplication()).getSomeVariable(); 

我想要使用它并在按下ListView上的某个项目时在其中一个活动中设置全局变量。所以我有这样的代码:

lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
      . 
      . 
      . 

      ((MyApplication) this.getApplication()).setSomeVariable("foo"); 
     } 

     }); 

但是我得到它说的错误“的方法getApplication()是未定义的类型新AdapterView.OnItemClickListener(){}”。

我想知道我得到这个错误的原因是什么,以及如何解决这个错误,或者将一个变量从一个活动传递给另一个的更好方法。

感谢,

TJ

回答

4

在一个匿名类中你不能这么说。你必须围绕内部阶级来定义阶级。

像MyApplication.this.get ..

时使用:

class MyApplication { 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
      ((MyApplication) MyApplication.this.getApplication()).setSomeVariable("foo"); 
     } 
} 

} 

的 “这一点。”在一个恼人的内部类中引用内部类本身。

+0

MyApplication是与我想要使用setSomeVariable()的地方不同的类。可以说我希望在MyOtherApplication中完成它,而setSomeVariable方法在MyApplication中定义。所以你所建议的不是现在的样子。 – TJ1

+0

对于我写的代码,“getApplication()”方法可以获得所需的类,当您在MyOtherApplication类中您必须编写MyOtherApplication.this ...因为您在匿名类中调用它并且关键字“this”指向内部类。 – Michele

0

你必须使用MyClass.this.getApplication()如果您在MyClass的成员函数定义匿名OnItemClickListener。 OnItemClickListener不知道应用程序。

+0

当我使用MyClass.this.getApplication()我得到另一个错误,说:“不能从应用程序转换到MyApplication”。 – TJ1

0

我不认为你需要施放它......应用程序已经存在。

MyApplication.getSomeVariable(); 

应该像任何其他类一样工作。