【问题标题】:How to use setters and getters to pass data between classes in android如何使用setter和getter在android中的类之间传递数据
【发布时间】:2026-02-22 10:40:02
【问题描述】:

我正在编写一个程序,它有两个类,一个扩展 Activity,另一个扩展 SurfaceView。该活动有一个 SurfaceView 类的对象。我正在尝试使用 setter 和 getter 在这两个类之间发送数据,但是每次我尝试时,eclipse 都会说设置和获取的方法需要是静态的。我不能这样做,因为我不希望它们是静态的。

Activity 类包含以下方法:

public float getxTouch(){
return xTouch;
}
public float getyTouch(){
return yTouch;
}

SufaceView 类包含以下代码:

xpos = ActivityClass.getxTouch();
ypos = ActivityClass.getyTouch();

如何在不将方法设为静态的情况下解决此问题?

【问题讨论】:

    标签: java android android-activity surfaceview


    【解决方案1】:

    将活动类的引用传递给您的表面类。做这样的事情,所以你不必使方法静态。

    在你的 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);
    

    【讨论】:

      【解决方案2】:

      您可以使用 Intent 在您的 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 上下文来读取它们。

      【讨论】: