具体情况如下:主类文件:
public class LunarLander extends Activity {
    private LunarView mLunarView;
    private LunarThread mLunarThread;    protected void onCreate(Bundle savedInstanceState) {    }//想调用的方法
    public void playSound(){
    //something
    }
}Thread文件:class LunarView extends SurfaceView implements SurfaceHolder.Callback {    class LunarThread extends Thread {        public void setState(){
            //想在这里调用playSound()方法
        }
}}请问怎么才能实现?网上查了,好像要用sendMessage,但是怎么调用一个方法呢?
可不可以直接访问到? 谢谢先线程holdermessageasynctask

解决方案 »

  1.   

    创建LunarView传入一个handle  
      

  2.   


    能说详细点么?LunarThread构造函数里加了mHandler = handler;
    但是不知道怎么能和Activity 里面的方法联系上
      

  3.   


    Handler handler = new Handler(){ @Override
    public void handleMessage(Message msg) {
    // TODO Auto-generated method stub
    if(msg.arg1){
    //想调用的方法
    public void playSound(){
    //something
    }
    }
    }

    };

    public class MyThread implements Runnable{ @Override
    public void run() {
    // TODO Auto-generated method stub
            
                try {
    //自己设置你的状态根据需要自己定义
                    setState = true;
                    Message message = new Message();
                    message.arg1 = setState;
                    handler.sendMessage(message);// 发送消息
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
    }

    }
      

  4.   

    也可以不用handler ,传个context过去,然后把context 强制转换为Activity,然后调用里面的公有方法
      

  5.   

    方法1. 用handler方法
    方法2.
     
    public void setState()
    {
    //想在这里调用playSound()方法
    LunarLander.this.playSound();
    }
      

  6.   

    非常感谢大家帮助!to mmorss:
    对,我的环境下用这个方法最简单, 就一句
    ((LunarLander)getContext()).stopSound();to detective2005:
    你的方法应该是适用面最广的,学习了to u010495676:因为没在onCreate()中,所以好像不能用 LunarLander.this.playSound();