0

Activity を拡張して、AsynchTask からコールバックできる標準メソッドを定義しようとしています。これがスケルトンコードです。

public class R3Activity extends Activity{


    public void displayresult(String xmlresult){

    }//displayresult


}

これで、R3Activity を拡張して作成したすべてのアクティビティで、displayresult メソッドを実装できるようになりました。

次に、これを次のように使用します.....

    public class MainActivity extends R3Activity{


    private void somemethod(){
           DatabaseAccess dba = new DatabaseAccess();
           dba.setActivity(this); // Pass a ref to the activity into the class with the Asynch task
           dba.execute(new URL(database_url));

    }

    }

}

DatabaseAccess クラスは、AsnchTask を使用してオフになり、データをフェッチする汎用クラスであると想定されています。私の問題は、コールバックを一般的な方法で処理することです。

public class DatabaseAccess extends AsyncTask<URL, String, String> {
        private R3Activity m_activity;

    public void setActivity(R3Activity activity) {
        m_activity = activity;
    }

    @Override
    protected String doInBackground(URL... params) {
           //Connect to database etc
           String strdata = "blah";

        }

    protected void onPostExecute(String result) {
        if ((strdata != null) && (m_activity != null)) {

            m_activity.displayresult(strdata);

        }
    }

}

このメソッドは R3Activity のすべてのインスタンスで使用できるため、m_activity.displayresult が機能するようになりました。

すべてのアクティビティに実装できるイベント ハンドラーをトリガーする displayresult() を取得するにはどうすればよいですか。

何かのようなもの....

public class MainActivity extends R3Activity implements  DatabaseResultListener {


public void DbCallback(){
//This gets triggerred by the displayresult callback
}

}
4

1 に答える 1

2

interface for callback. を使えば簡単にできると思います。

interface AsyncTaskListener{
     public void onTaskComplete(T result)
}

次に、それを実装します

public class MainActivity extends Activity implements AsyncTaskListener

そして、AsycTask,onPostExecute method call listener method like,

 objAsyncTaskListener.onTaskComplete(T result);
于 2012-07-12T11:09:15.000 に答える