我正在编写一个包含两个类的程序,一个扩展Activity,另一个扩展SurfaceView。该活动具有SurfaceView类的对象。我试图使用setter和getter在这两个类之间发送数据,但每次我尝试时,eclipse都说设置和获取的方法需要是静态的。我无法做到这一点,因为我不希望它们是静态的。
Activity类包含以下方法:
public float getxTouch(){
return xTouch;
}
public float getyTouch(){
return yTouch;
}
SufaceView类包含以下代码:
xpos = ActivityClass.getxTouch();
ypos = ActivityClass.getyTouch();
如何在不使方法静态的情况下解决这个问题?
答案 0 :(得分:0)
将活动类的引用传递给表面类。做这样的事情,所以你不必使方法静态。
在SurfaceView类中:
Activity foo;
//some method to set foo:
public void setFoo(Activity foo) {
this.foo = foo;
}
// Then you can simple call your getX() and getY() methods like this:
foo.getX(); and foo.getY();
来自您的Activity类:
yourSurfaceViewInstance.setFoo(this);
答案 1 :(得分:0)
您可以使用Intents在Activity和您的班级之间传输变量的引用。
首先,让我们创建一个包含变量的可序列化类:
class XYTouch implements Serializable{
public static final String EXTRA = "com.your.package.XYTOUCH_EXTRA";
private float xTouch;
public void setX(String x) {
this.xTouch = x;
}
public String getX() {
return xTouch;
}
// do the same for yTouch
}
然后,在您的活动的onCreate
中,创建一个新的XYTouch对象,并使用set和get方法设置其xTouch和yTouch属性。然后写
Intent intent = new Intent(this, OtherClass.class);
intent.putExtra(XYTouch.EXTRA, xytouchobject);
startActivity(intent);
在您想要访问这些变量的其他类(OtherClass)中:
public void onCreate(Bundle savedInstance){
// ....
XYTouch xytouch = (XYTouch) getIntent().getSerializableExtra(XYTouch.EXTRA);
// ....
}
然后,您可以在类中的任何位置使用XYTouch的get和set方法来引用xTouch和yTouch。
另一种方法是从您自己的类中检索它,扩展Application并保留对这些变量的引用。然后,您将使用Activity上下文来读取它们。