初学者 - 使用在另一个类中的一个类中定义的变量

时间:2011-04-17 22:53:05

标签: android eclipse android-activity global-variables android-intent

所以,让我们说在我的主要活动中,我有一个像这样声明的数组,即使用任何main方法都没有任何问题:

public int currentPrices[] = {0,0,0,0,0,0,0,0,0};

现在,我的buyDialog课程如下:

package foosh.Frontier;


import android.app.Activity;
import android.os.Bundle;
import foosh.Frontier.*;

public class buyDialog extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // Be sure to call the super class.
        super.onCreate(savedInstanceState);

        currentPrices[0]=999;

        //insert setup magic here
        setContentView(R.layout.buydialog);
}  }

Eclipse持续表示无法解析currentPrices。如何将子活动链接到父活动的变量?

我可能做错了,因为我很擅长构建它们。但是这一行是来自main:

case R.id.buyButton1: 
            currentRes = masterRes.get(0);
            Intent intent = new Intent();
            intent.setClass(main.this, buyDialog.class);
            startActivity(intent);

2 个答案:

答案 0 :(得分:8)

简单的答案是你必须使用包含实例的名称来限定它。

因此,如果实例myinstance访问currentPrices字段,您可以这样做:

myinstance.currentPrices

但是,你真的应该使用getter和setter,这里有很多关于实际获取活动实例句柄的问题。我建议您在掌握Android之前先阅读一本介绍Java书籍。查看http://math.hws.edu/javanotes/以获得良好的在线介绍。

根据你的标签,我假设你有一些全局变量的概念。 Java中没有这样的东西。实际上,您可以拥有全局可访问的static个变量。例如

public class MyClass{
  public static int MY_VALUE = 4;
}

您可以通过撰写

进行访问
MyClass.MY_VALUE

但是,对于实例变量,即没有static关键字限定的实例变量,您有一个已通过new关键字分配的类的实例。

例如

MyClass someInstance = new MyClass();
someInstance.currentPrices

活动更复杂的原因是因为您无法访问正在使用的活动类的实例,除非您执行了非常有创意的活动。

这有意义吗?

答案 1 :(得分:2)

如果您需要在不创建静态变量的情况下执行此操作,您还可以将数组作为额外内容传递给Intent,如下所示:

intent.putExtra("currentPrices", currentPrices);
startActivity(intent);

然后,一旦你进入新的Activity,就像这样检索它:

int[] currentPrices = getIntent().getIntArrayExtra("currentPrices");

看起来你正在修改对话框中的原文,但是如果没有使用startActivityForResult()并以这种方式处理它,那么Chris的方法要简单得多。