从另一个 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()]
为简洁起见,我对此进行了简化;希望这个例子实际上不起作用。我正在用一个变量创建和做一些事情,然后我让另一个 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()]