1

私には2つのクラスがあります。1つ目は、通常のレイアウトを含むアクティビティです。2つ目は、スレッドベースのSurfaceViewクラスです。私の質問はこのトピックとまったく同じですが、AsyncTaskの代わりにThreadを使用しています。

Android / Java:別のクラスからビューを変更しますか?

スレッドが特定のイベントを発生させたときに、アクティビティ内の他のビューを更新できるようにしたいのですが、SurfaceView内からそれらのビューに正しくアクセスする方法が見つからないようです。

public class MyActivity extends Activity{

    Button myButton = (Button)findViewById(R.id.my_button);
    ...
}

public class MySurfaceView extends SurfaceView implements Runnable{

    // Need code here that can access myButton to call myButton.setText("Some Text")
}

ほとんどの提案は次のようなことを言っています:

((Button)findViewById(R.id.my_button)).setText("My Text");

my_buttonは、元々アクティビティのonCreate()で設定されています。ただし、SurfaceView内から呼び出された場合、これは常にnullポインターになります。さらに推論すると、その方法でビューを見つけるためにアプリケーションコンテキストにアクセスしたいのですが、それは恐ろしいコンテキストメモリリークの扉を開いたままにしているようです。

これはAndroidプログラムではかなり一般的なことのように思えますが、これを行う適切な方法を見つけることができないようです。

4

1 に答える 1

0

アクティビティでイベントとsetListenerをブロードキャストするSurfaceViewからリスナーを実装しようとしましたか。http://tseng-blog.nge-web.net/blog/2009/02/17/how-implement-your-own-listener-android-java/の実装方法についてはこちらをご覧ください

于 2012-09-19T22:20:53.320 に答える