2011-11-13 6 views
2

는 여기에 문제Android 진행률 대화 상자가 너무 늦게 표시 되었습니까?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    progressDialog = ProgressDialog.show(ContactMainActivity.this, "", 
      "Loading. Please wait...",true); 
    setContentView(R.layout.contactlist); 
     contactListView=getListView(); 
     contactListView.setTextFilterEnabled(true); 
     contactListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 


Thread t = new Thread() { 

     public void run() { 

     try{ 
      runOnUiThread(new Runnable() { 
       public void run() { 



      //stuff that updates ui 
        queryAllRawContacts(); 
        progressDialog.dismiss(); 
       } 
      }); 


      registerForContextMenu(contactListView); 
     } catch (Exception e) { 

     Log.e("tag", e.getMessage()); 

     } 

     // dismiss the progress dialog 



     } 

     }; 
     t.start(); 



} 

이 내 활동 클래스의에서 onCreate 방법입니다.

이 활동은 실제로 탭 위젯의 한 탭입니다. 그래서이 탭을 클릭하고 활동을 실행하면 약 2 초를 기다린 다음 10 밀리 초와 같은 진행 대화 상자를 표시하고 데이터로 UI를 업데이트합니다. 진행률 대화 상자를 닫습니다. 탭을 클릭하자마자 진행 대화 상자가 표시되고 데이터를로드하는 데 약 2 ~ 3 초가 걸립니다. UI를로드하고 업데이트 한 후 진행률 표시 줄이 닫힙니다.

감사

답변

1

queryAllRawContacts() 필요는 UI 스레드에서 실행되지 않을 수 있습니다. 코드를 다음과 같이 변경하십시오.

Thread t = new Thread() { 
    public void run() { 
    queryAllRawContacts(); 
    try{ 
     runOnUiThread(new Runnable() { 
     public void run() { 
      //stuff that updates ui  
      progressDialog.dismiss(); 
     } 
     }); 
     registerForContextMenu(contactListView); 
    } catch (Exception e) { 

    Log.e("tag", e.getMessage()); 

    } 

    // dismiss the progress dialog 

    } 

    }; 
t.start(); 
+0

내가 말한대로 변경했습니다. 이제 실행하면 즉시 나타납니다. 그러나 그것이 기각되면 앱을 죽입니다. 그것은 UI를 업데이 트하지 않니? – akd

+0

앱에 다른 문제가 있어야합니다. 당신은 logcat 뭐라고합니까? –

+0

고맙습니다. 기본적으로 작동했습니다. 나는 contactListView.setAdapter (adapter)를 옮겼습니다. 기본적으로 Ui를 업데이트하는 runOnUithread 메소드를 호출합니다. 이제 매력처럼 작동합니다 :) 감사합니다. – akd

관련 문제