【问题标题】:Android passing variables between activitiesAndroid 在活动之间传递变量
【发布时间】:2011-10-06 19:07:39
【问题描述】:

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


您可以扩展基础 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() 未定义用于类型 new AdapterView.OnItemClickListener(){}”。

我想知道我收到此错误的原因是什么以及如何修复它,或者将变量从一个活动传递到另一个活动的更好方法。

谢谢,

TJ

【问题讨论】:

    标签: android android-activity global-variables parameter-passing


    【解决方案1】:

    在匿名类中你不能这么说。你必须在内部类周围指定类。

    喜欢 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");
            }
     }
    
    }
    

    “这个”。在一个引用内部类本身的匿名内部类中。

    【讨论】:

    • MyApplication 与我想使用 setSomeVariable() 的地方不同。假设我想在 MyOtherApplication 中执行此操作,而 setSomeVariable 方法是在 MyApplication 中定义的。所以你的建议并没有按原样工作。
    • 我写的代码完全没问题,方法“getApplication()”让你得到你想要的类,当你在 MyOtherApplication 类中时,你必须编写 MyOtherApplication.this... 因为你调用它在一个匿名类中,关键字“this”指代内部类。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      如果您在 MyClass 的成员函数中定义了匿名 OnItemClickListener,则可以使用 MyClass.this.getApplication()。 OnItemClickListener 不知道应用程序。

      【讨论】:

      • 当我使用 MyClass.this.getApplication() 时,我收到另一个错误消息:“无法从 Application 转换为 MyApplication”。
      【解决方案4】:

      我认为您不需要强制转换它...应用程序已经存在。

      MyApplication.getSomeVariable();
      

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

      【讨论】:

        猜你喜欢
        • 2013-08-01
        • 2017-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-19
        • 2014-12-08
        • 2012-08-29
        • 2018-10-08
        相关资源
        最近更新 更多