主类有两个想要访问另一个类的变量:
public class MyClassA extends Activity {
int i = 1;
Button b1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.i = 31;
this.b1 = (Button) findViewById(R.id.btn1);
~~
}
}
第二类想要在mainClass对象中调用变量:
public class MyclassB implements OnClickListener{
MyClassA mainClass = new MyClassA();
Button btn = mainClass.b1;
int n = mainClass.i;
public void OnClick(View arg0){
Log.v("btn:",btn);
Log.v("int:",n);
}
//btn returns null;
//int returns 1;
但是onCreate
方法没有设置变量..
为什么不设置像this.i=31
这样的主类变量?
答案 0 :(得分:2)
当您将活动实例化为简单类时,它将不会执行onCreate()
,这就是i
值保持为1
的原因。使用Intent
和Activity
时会调用onCreate()。
如评论所述,您可能需要使用Inner classes(或)匿名类。阅读此documentation了解更多信息。
答案 1 :(得分:1)
- 使用内部课程。
public class MyClassA extends Activity {
int i = 1;
Button b1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.i = 31;
this.b1 = (Button) findViewById(R.id.btn1);
~~
}
class MyclassB implements OnClickListener{
// You can directly access the members of the Outer class from the Inner Class
Button btn = b1;
int n = i;
public void OnClick(View arg0){
Log.v("btn:",btn);
Log.v("int:",n);
}
}
}