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

Modify variables in an instance from another class Android

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

我在视图中完全做到了这一点。我只是传递 activity,然后当我需要使用它时,我使用 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(),因为您要在 类 之间传递超类 Activity。要访问 gettest() 方法,您需要传递特定的子 activity(MyActivity 扩展 Activity,传递 MyActivity 而不是 Activity)或者你可以投射到你的特定 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();
    }

自己实例化 Activity 不是个好主意new 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);
}
}

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