我有两节课。第一个是包含通常布局的 Activity。第二个是基于线程的 SurfaceView 类。我的问题与本主题完全相同,但使用 Thread 而不是 AsyncTask:
当线程导致某些事件时,我希望能够更新 Activity 中的其他视图,但我似乎无法找到从 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 最初是在 Activity 的 onCreate() 中设置的。但是,当从 SurfaceView 中调用时,这总是会导致一个空指针。进一步的推理会告诉我,我想访问应用程序上下文以以这种方式找到视图,但这似乎为可怕的上下文内存泄漏敞开了大门。
这似乎在 Android 程序中应该相当普遍,但我似乎找不到合适的方法来做到这一点。