0

私は2つのクラスを持つプログラムを書いています。1つはActivityを拡張し、もう1つはSurfaceViewを拡張します。アクティビティには、SurfaceViewクラスのオブジェクトがあります。セッターとゲッターを使用してこれら2つのクラス間でデータを送信しようとしていますが、試行するたびに、設定と取得のメソッドは静的である必要があるとeclipseは言います。静的にしたくないので、これを行うことはできません。

Activityクラスには、次のメソッドが含まれています。

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

SufaceViewクラスには、次のコードが含まれています。

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

メソッドを静的にせずにこれを修正するにはどうすればよいですか?

4

2 に答える 2

1

インテントを使用して、アクティビティとクラスの間で変数の参照を転送できます。

まず、変数を含むシリアル化可能なクラスを作成しましょう。

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 への参照を取得できます。

もう 1 つの方法は、Application を拡張し、それらの変数への参照を保持する独自のクラスから取得することです。次に、Activity コンテキストを使用してそれらを読み込みます。

于 2012-07-25T21:59:40.640 に答える
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();

アクティビティクラスから:

yourSurfaceViewInstance.setFoo(this);
于 2012-07-25T19:19:44.407 に答える