从另一个类 Android 修改实例中的变量



为了简洁起见,我简化了它;希望这个例子实际上不起作用。我正在用一个变量创建和做事,然后我让另一个类做一些事情,然后那个类引用回原始的并告诉它用这个变量做更多的事情。

我已经用视图做到了这一点。我只是传递活动,然后当我需要使用它时,我使用activity.findViewById(id)来做一些事情。对于变量,你不能只做 activity.variable。我尝试使用getter(如本例所示(,但也许我仍然做错了,或者无法按照我想要的方式完成:

public class MyActivity {
    private int test;
    public void onCreate(Bundle savedInstanceState) {   
        test = 5;
        int data = 100;
        //Pass something to it
        new NotAnActivity().func(MyActivity.this,data);
    }
    public int gettest() {
        return test;
    }
    public void func(Activity instance, int response) {
        int test = new MyActivity().gettest();
        //Do stuff with test
    }
}
public class NotAnActivity {
    public void func(Activity instance, int data) {
        //Do stuff with data
        int response = 20;
        //Try to pass information back
        new MyActivity().func(instance,response);
    }
}

不能使用 activity.gettest(),因为要在类之间传递超类活动。要访问gettest()方法,您需要传递特定的子活动(MyActivity扩展Activity,传递MyActivity而不是Activity(,或者您可以强制转换为您的特定活动。

((MyActivity)activity).getter(); 

所以在这里,而不是:

public void func(Activity instance, int data) {
        //Do stuff with data
        int test = ((MyActivity)instance).gettest();
    }

public void func(MyActivity instance, int data) {
        //Do stuff with data
        int test = instance.gettest();
    }

自己实例化您的活动不是一个好主意 新 A((

public class MainActivity extends AppCompatActivity {
private int test;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    test = 5;
    int data = 100;
    new NotAnActivity().func(this,data);
}
public int gettest() {
    return test;
}
public void func(MainActivity instance, int response) {
    //int test = new MainActivity().gettest();
    int test = instance.gettest();
    Log.v("variable", "test = " + test);
}
}
class NotAnActivity {
public void func(MainActivity instance, int data) {
    //Do stuff with data
    int response = 20;
    //Try to pass information back
    instance.func(instance,response);
}
}

你可以试试。你的错误是[新的MyActivity((]

最新更新