1

这是问题所在,我有一个类(可以说是class1),根据您选择的按钮,int x 更改为数字1-6。我需要能够在类 2 中调用这个 int,但它不读取新的 int x 值,它只读取默认值。

public class class1 extends Activity {
    private view btn1;
    private view btn2;
    //...
    private view btn6;
    public int x = 1;

btn1.setOnClickListener(sbtn1Listener);
//...
btn2.setOnClickListener(sbtn2Listener);

private View.OnClickListener sbtn1Listener = new View.OnClickListener() {
    public void onClick(View v) {
        x = 1;
    }
};
private View.OnClickListener sbtn2Listener = new View.OnClickListener() {
    public void onClick(View v) {
        x = 2;
    }
};
//...

所以按钮在那个程序中工作得很好,还有更多,但我现在就先把它留在那里。然后 class2 需要读取新值。

public class class2 extends BaseObject {
    public int y = 1;

    class1 a = new class1();
    a.getx();

    y = a;

    if (y == 1) {
    }else if (y == 2){
    //...

它不会从 class1 读取新的 x 值,而是仅读取默认设置为 1。

另请注意,我无法更改 class2 的扩展部分,因为 BaseObject 是它运行所有组件所必需的。

4

2 回答 2

2

那是因为 class2 正在创建 class 1 的新实例。

您需要做的是访问已经存在的 1 类实例。

如果你全球化类 2,然后通过类 1 设置它,你将能够访问它。

public class class1 extends Activity {
private view btn1;
private view btn2;
//...
private view btn6;
public int x = 1;
public class2 cls2; // SET GLOBAL. Needs initialising somewhere relevant.

btn1.setOnClickListener(sbtn1Listener);
//...
btn2.setOnClickListener(sbtn2Listener);

private View.OnClickListener sbtn1Listener = new View.OnClickListener() {
public void onClick(View v) {
    x = 1;
    cls2.x = 1; // Or use setter methods in class 2.
}
};
private View.OnClickListener sbtn2Listener = new View.OnClickListener() {
public void onClick(View v) {
    x = 2;
    cls2.x = 2;
}
};

然后在类 2 中有一个名为 x 的公共变量。(您在点击侦听器中设置的那个。

重要提示:无论何时调用类 2,请确保将其分配为全局实例,而不是新实例。

于 2012-08-28T17:46:30.180 回答
2

使int x a static variable.

例如:

public static int x = 1;

现在像这样从另一个类访问它......

int y = class1.x;

// 这将反映更改后的 x 值。

于 2012-08-28T17:46:50.673 回答