0

それが正しい方法かどうかはわかりませんが、そうである場合はどうすればよいですか...

AsyncTask を持つ抽象クラスが 1 つあります。

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 response( class A)のクラスを持ってclass Bいて、それを拡張して post メソッドをオーバーライドするので、特定の状況で必要なことを行うことができます (別のデータまたはその他の nvm を期待します)。

私のアクティビティでは、class Bのpostメソッドが呼び出されたときにアクションを実行したい

リスナーまたはハンドラーのidkを行う必要があるかどうかはわかりません....

4

1 に答える 1

0

ステファンの言うとおり、なぜ物事を複雑にするのですか?

スレッド化のこの実際の単純な例を参照してください。

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);
    }       
}

}

于 2013-05-21T09:17:56.820 に答える