2011-11-25 3 views
1

ListView 및 "CreateEvent"Activity를 확장하는 "EventsList"라는 두 가지 활동이 있습니다. 사용자는 목록에서 "이벤트"를 선택하여 CreateEvent 활동에서 편집 할 수 있습니다. 사용자가 AsyncTask를 생성하여 데이터를 웹 서비스에 전달하는 것보다 CreateEvent 저장을 클릭하면 응답을 받고 응답을 데이터베이스로 구문 분석합니다.다른 Activity에서 스폰 된 AsyncTask에서 ListView 업데이트

내 문제는 AsycTasks onPostExecute()의 결과를 EventsList 활동에 알리는 방법을 모른다는 것입니다. StartActivityForResult에있는 목록을 새로 고쳐 보았지만이 시점까지는 스레드가 자주 완료되지 않았습니다.

그래서 CreateEvent에 의해 생성 된 AsyncTask의 결과를 EventsList 활동에 어떻게 알릴 수 있습니까? 나는 사용자 정의 콜백을 사용하려고하는 행운이 없었다.

Activity Interaction Diagram

편집

정말 글로벌 플래그 또는 adapter 사용에 대한 예리한 아니에요. 콜백/리스너를 사용하는 것이 가장 좋습니다. 그렇게하면 절대적으로 필요한 경우에만 목록이 변경되거나 통보됩니다. (어댑터가 글로벌 기준이 있기 때문에) 당신이 AsyncTasklist adapter of EventsList 활동 데이터를 입력하고 AsyncTask를의 onPostExecute() 그냥 finish() the CreateEvent activity 단지 notifydatasetChanged() for adapter를 호출이 지금 EventsList's onActivityResult() 당신을 빌려하는 경우

+0

StartActivityForResult()가 더 좋은 방법 인 것 같습니다. 가능한 해결 방법은 CreateEventActivity입니다. AsyncTask를 시작한 후 즉시 EventsListActivity로 돌아 가지 않고 대신 ProgressDialog를 표시하고, AsyncTask 완료를 기다리고, CreateEventActivity에서 setResult()를 기다린 다음 EventsListActivity로 돌아가십시오. 시도 할만한 가치가 있습니다. – yorkw

답변

0

나는 생각한다.

+0

나는 어댑터를 전역 적으로 만들 수 있지만, 조금 무리 스럽다 (나는 여전히 그것을 할 수도있다). CreateEvent 활동이 끝나면 AsnycTask가 일반적으로 완료되지 않았기 때문에 onActivityResult가 작동하지 않습니다. 콜백 (call backs)이 더 좋은 선택이 아닌가? – JonWells

0

EventsList startActivityForResult "CreateEvent"

비동기 작업 내에서 데이터를 putExtra로 넣으면 큰 데이터 유형이나 복잡한 데이터 유형으로 애플리케이션 수준의 데이터 저장소 또는 정적 인스턴스를 사용할 수 있습니다.

in EventsList ofEventList는 putExtra 또는 정적 인 텐트로 데이터를 읽습니다.

0

항상 BroadcastReceiver을 사용할 수 있으며 AsyncTask의 onPostExecute()에서 완료 작업을 활동에 전송할 수 있습니다. 결과에 개체를 전달해야하는 경우 Parcelable을 구현하는 모델 개체를 만든 다음 Parcelable을 추가로 보내십시오.

관련 문제