Android - 函数执行监听器

时间:2013-05-21 08:32:56

标签: android function events listener handler

嘿,我不知道这是否是正确的方法,但如果是我怎么办呢......

我有一个带有AsyncTask的抽象类

public abstract class A{
  A(){
    new Task().execute();
  }

  public abstract void postAction();

  private class Task extends AsyncTask<String, String, String>{
    protected String doInBackground(String... args)
    {
      //smth
    }

    protected void onPostExecute(String file_url){
       postAction();
    }
  }
}

之后我有一个扩展A类的类并覆盖它的postAction()方法:

public class B extends A{
   B(){
      //smth
   }

   postAction(){
     //some action
   }
}

在我的活动中,我有B的实例,我想在调用postAction时执行操作...所以我想要函数监听器,如果可能的话我该怎么办

class C extends Activity{
   public void onCreate(Bundle savedInstance) {
      super.onCreate(savedInstance);
      //somethingggg happeiningggg
   }

   MyListener listener = new MyListener(){
       onPostActionCalled()
       {
         //start another activity or smt :D
       }
   };
}

所以我有json响应类(class A)和class B扩展它并覆盖它的post方法,所以我可以做我想要的特定情况(期望不同的数据或其他nvm)

在我的活动中,我希望在调用class B的post方法时执行操作

我不知道我是否需要做听众或处理程序idk ....

1 个答案:

答案 0 :(得分:0)

Stefan是对的,为什么会让事情复杂化?

请参阅这个真实简单的线程示例:

public class MyActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     

    new MyTask(new TaskListener() {

        @Override
        public void finished(boolean result) {
            // back on main thread after task finishes

        }
    }).execute();
}

private interface TaskListener{
    void finished(boolean result);      
}

private class MyTask extends AsyncTask<Object, Integer, Boolean>{

    private TaskListener mListener; 


    public MyTask(TaskListener mListener) {
        super();
        this.mListener = mListener;
    }

    @Override
    protected Boolean doInBackground(Object... params) {
        // long running background operation
        return true;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        mListener.finished(result);
        super.onPostExecute(result);
    }       
}

}