2011-05-01 7 views
2

한 가지 문제를 어떻게 해결해야하는지 궁금합니다.다운로드 된 데이터를 기다리는 패턴

활동을 시작하면 AsyncTask을 사용하여 일부 데이터를 다운로드합니다.

사용자가 메뉴에서 옵션을 선택하면 캐시 된 데이터를 사용합니다.

데이터를 다운로드하는 동안 옵션을 선택하면 어떻게됩니까? UI를 차단하지 않고 데이터를 기다리는 가장 좋은 방법은 무엇입니까?

편집 : 메뉴를 변경하고 싶지는 않지만 옵션을 비활성화하십시오. 데이터 다운로드를 기다리는 동안 회 전자를 보여주고 싶습니다.

감사

+0

isDoneDownloading 플래그를 false로 설정하고 사용자가 유용한 사용자 의견을 반환하는 메뉴의 데이터를 사용하려고 할 때이 플래그를 확인하십시오. onPostExecute에서 플래그를 true로 설정하십시오. 이렇게해도 데이터를 다운로드하는 동안 사용자가 UI에서 다른 일을하지 못하게됩니다. – JAL

답변

3

/비활성화 onMenuOpened의 항목을() 수 :

@Override 
    public boolean onMenuOpened(int feature, Menu menu) { 
    if (menu != null) { 
     menu.getItem(INDEX_FOR_THE_MENU_ITEM).setEnabled(stuffIsAvailable); 
    } 
    return super.onMenuOpened(feature, menu); 
    } 

편집 - 진행 대화 상자 표시 :

ProgressDialog dialog = new ProgressDialog(context); 
dialog.setMessage(context.getString(dialogTextResourceId)); 
dialog.show(); 

dialog.dismiss(하는 것을 잊지 마세요)를 그 때를 너 끝났어.

+0

그게 해결책이지만 메뉴를 변경하고 싶지는 않습니다. 다운로드가 끝나기를 기다리는 동안 회 전자를 넣는 것을 선호합니다. 내 질문이 업데이트됩니다. 아이디어를 주셔서 감사합니다 – Jonas

+0

그렇다면 기다리는 동안 ProgressDialog를 표시 할 수 있습니다. 답변을 수정했습니다. – dmon

+0

물론, 다운로드의 끝을 어떻게 감지합니까? – Jonas

1

메뉴 옵션을 누르면 AsyncTask.getStatus()으로 전화를 걸 수 있으며 계속 실행중인 경우 ProgressDialog를 표시 할 수 있습니다.

AsyncTask.onPostExeute()에서 활동에 데이터를 사용할 수 있음을 알리고 회 전자를 닫을 수 있습니다.

+0

다음과 같은 경우 : 1. main : getStatus == RUNNING. 2. Asyntask에서; 작업이 완료되고 대화 상자가 닫힙니다. 3. 메인에서 : 메인이 개최되었고, 이제 대화 상자 만 보여줍니다. 영원히 잠긴다./ – Jonas

+0

일단 사용자가 메뉴 항목을 누르고 데이터가 준비되지 않았다면 메인에서 무엇을할까요? 기다리는 동안 회 전자를 표시하려면 UI를 차단하고 기본 회 전자를 시작하는 것이 가장 좋습니다. 그런 다음 AsyncTask가 끝나면 메인과 메인이 회 전자를 닫고 데이터를 사용할 수 있음을 알릴 수 있습니다. – TrevorBliss

0

다운로드가 시작되면 취소 할 수없는 진행 대화 상자를 실행하고 다운로드가 완료되면 닫습니다. ProgressDialog 클래스에서 읽기.

+0

백그라운드에서 다운로드 할 때 사용자를 차단하고 싶지 않습니다! 그는 다운로드 직후에 데이터를 사용하고 싶지 않을 수도 있습니다. – Jonas

+0

@Jonas : 메뉴 항목을 비활성화하지 않으려면 (모달 ProgressDialog를 통해) 사용할 수 없게 만들고 싶지 않은 경우 메뉴 항목 핸들러에 다운로드 상태 확인을 삽입하고 AlertDialog를 "나중에 다시 시도하십시오". –

관련 문제