1

我有两节课。第一个是包含通常布局的 Activity。第二个是基于线程的 SurfaceView 类。我的问题与本主题完全相同,但使用 Thread 而不是 AsyncTask:

Android/Java:从另一个类更改视图?

当线程导致某些事件时,我希望能够更新 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 程序中应该相当普遍,但我似乎找不到合适的方法来做到这一点。

4

1 回答 1

0

您是否尝试过从 SurfaceView 实现一个侦听器,该侦听器在活动上广播事件和 setListener。在这里查看如何实现http://tseng-blog.nge-web.net/blog/2009/02/17/how-implement-your-own-listener-android-java/

于 2012-09-19T22:20:53.320 回答