私には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プログラムではかなり一般的なことのように思えますが、これを行う適切な方法を見つけることができないようです。