2012-07-12 62 views
0

我正在擴展活動來定義一個標準的方法,我可以從一個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 
} 

} 

回答

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); 
+0

此外,你可以看到這個帖子。我發現它非常有用:http://www.codeproject.com/Articles/162201/Painless-AsyncTask-and-ProgressDialog-Usage?fid=1612106&df=90&mpp=10&noise=3&prof=True&sort=Position&view=Expanded&fr=21#xx0xx – Yury 2012-07-12 11:13:19

+0

謝謝。事實證明,這非常有幫助。現在我唯一的問題就是如何確保用戶在Activity中基於我的活動調用超級事件。 – user1325094 2012-07-12 17:13:41