扩展一个Activity添加一个回调方法

时间:2012-07-12 11:06:08

标签: android events android-activity callback implements

我正在扩展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);

        }
    }

}

现在m_activity.displayresult有效,因为此方法在R3Activity的每个实例中都可用。

如何让displayresult()触发我可以在每个Activity中实现的事件处理程序。

像......那样的东西。

public class MainActivity extends R3Activity implements  DatabaseResultListener {


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

}

1 个答案:

答案 0 :(得分: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);