我有两节课。第一个是包含通常布局的Activity。第二个是基于线程的SurfaceView类。我的问题与本主题完全相同,但使用Thread而不是AsyncTask:
Android/Java: Change view from another class?
当线程导致某些事件时,我希望能够更新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中调用时,这总是会导致空指针。进一步的推理会告诉我,我想访问应用程序上下文以找到View的方式,但这似乎为可怕的上下文内存泄漏敞开了大门。
这似乎在Android程序中应该相当常见,但我似乎无法找到一种正确的方法。
答案 0 :(得分:0)
您是否尝试从SurfaceView实现一个侦听器,该侦听器在活动上广播事件和setListener。点击此处了解如何实施http://tseng-blog.nge-web.net/blog/2009/02/17/how-implement-your-own-listener-android-java/