所以,让我们说在我的主要活动中,我有一个像这样声明的数组,即使用任何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);
答案 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的方法要简单得多。