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

时间:2018-04-19 00:33:18

标签: java android android-activity instance

为简洁起见,我简化了这一点;希望这个例子实际上不起作用。我正在使用变量创建和处理,然后我有另一个类做一些东西,然后该类返回原始并告诉它用该变量做更多的东西。

我用视图完成了这个。我只是传递了活动,然后当我需要使用它时,我使用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);
    }
}

2 个答案:

答案 0 :(得分:1)

您不能使用activity.gettest(),因为您在类之间传递了超类Activity。要访问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()

答案 1 :(得分:0)

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()]