【问题标题】:Calling an int that gets changed in another class调用在另一个类中更改的 int
【发布时间】:2026-02-18 10:45:01
【问题描述】:

问题来了,我有一个类(可以说是 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){
    //...

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

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

【问题讨论】:

    标签: java android class int call


    【解决方案1】:

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

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

    如果你将 class 2 全球化,然后通过 class 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,请确保将其分配为全局实例,而不是新实例。

    【讨论】:

      【解决方案2】:

      制作int x a static variable.

      例如:

      public static int x = 1;
      

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

      int y = class1.x;
      

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

      【讨论】: