2011-10-24 2 views
0

ArrayAdapter에서 항목을 추가, 제거 및 지우려면 AsyncTask 클래스를 사용하고 있습니다. 아쉽게도 이러한 작업 중 하나가 실행되면 ArrayAdapteruiThread에서 스레드를 실행해야하므로 notifyDataSetChanged()이 필요합니다.안드로이드 - 어떻게 비동기 적으로 ArrayAdapter를 업데이 트합니까?

ArrayAdapter를 비동기 적으로 업데이트하기 위해 runOnUiThread(new Runnable(){...});을 사용하는 경우 새 스레드에서 업데이트하려고 시도하는 목적을 비동기 적으로 시작하지 않습니까?

가장 좋은 방법은 무엇입니까?

답변

4

do .notifyDataSetChanged() insde onPostExecute() 방법. onPostExecute() 메서드는 Ui-Thread에서 실행됩니다. 앱이 doInBackground() 메소드 실행 중에 주기적으로 업데이트해야하는 경우 publishProgress() (onProgressUpdate() 메소드 사용)을 사용하고 notifyDataSetChanged()onProgressUpdate() 메소드를 호출합니다.이 메소드는 또한 Ui 스레드에서 실행됩니다.

0

첫 번째 질문에 대답하려면 UI 스레드에서 호출하는 유일한 것이 notifyDataSetChanged() 인 경우 runOnUiThread를 호출해도 목적을 벗어나지 않습니다. AsycnAdpater에서 실제, 잠재적 장기 실행 작업을 모두 수행 한 다음 활동이 변경되었다고 말할 준비가되면 runOnUiThread()으로 전화하십시오. 사용자가 지정한 Runnable에서 지정한 명령 만 실행합니다.

그렇다면 AsyncTask를 사용하는 대신 AsyncTaskLoader을 사용해보세요. AsycnTaskLoaders는 목록을 비동기 적으로 채우기 위해 거의 특별히 설계되었습니다. API 레벨 10까지는 소개되지 않았지만 android Support Package을 사용하여 이전 API 레벨에서 액세스 할 수 있습니다.

1

다른 사람들이 이미 말한 내용에 뭔가를 추가하기 만하면 작업이 끝난 후에도 작업중인보기에 대해 어댑터 (또는 새 어댑터)를 다시 설정할 수 있습니다.

AFAIK는 코드에 따라 다르며 notifyDataSetChanged 이후 또는 커서를 새로 고친 후 참조로 작업하지 않을 경우 뷰가 즉시 업데이트되지 않을 수 있습니다.

활동을 끝내고 돌아올 때보기가 업데이트되면 어댑터를 다시 설정해야 할 수 있습니다.