2012-07-12 3 views
0

AsynchTask에서 콜백 할 수있는 표준 메소드를 정의하기 위해 Activity를 확장해야합니다. 여기에 스켈레톤 코드가 있습니다.활동 확장하기 콜백 메소드 추가하기

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 
} 

} 

답변

2

난 당신이 interface for callback를 사용한다고 생각 .and 쉽게 할 수있다.

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

+0

고맙습니다. 그것은 매우 도움이되는 것으로 밝혀졌습니다. 내 유일한 문제는 이제 어떻게 내 활동에 기반한 활동에서 사용자가 슈퍼를 호출하는지 확인하는 것입니다. – user1325094

관련 문제