2013-04-22 5 views
2

여기 내 코드가 대화 상자에 연결되어 있습니다. 그들이 버튼을 누르면, 그것은 나타나야하고 보여준 후에, 그것은 데이터를 처리해야하고 그것이 완료되면 숨겨져 야합니다. 그러나 그것은 나타나지 않습니다.Android ProgressDialog가 표시되지 않습니다.

ProgressDialog dialog = new ProgressDialog(this); 
dialog.setMessage("Prosimo počakajte da naloži podatke."); 
dialog.setIndeterminate(false); 
dialog.setCancelable(false); 
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 

private Button.OnClickListener listener = new Button.OnClickListener() { 
    public void onClick(View v){ 
     if(selectedClass >= 0){ 
      dialog.show(); 

      ... data processing ... 

      Intent firstUpdate = new Intent(context, ConfigurationActivity.class); 
      firstUpdate.setAction("android.appwidget.action.APPWIDGET_ENABLED"); 
      firstUpdate.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widget_id); 
      context.sendBroadcast(firstUpdate); 

      dialog.dismiss(); 
      setResult(RESULT_OK, firstUpdate); 
      finish(); 
     } else { 
      Log.i("Schedule", "Missing selections"); 
     } 
    } 
}; 

도움 주셔서 감사합니다.

+2

코드 처리가 nework 작업 또는 UI 스레드를 차단하는 작업과 같을 경우 진행률 대화 상자가 표시되지 않습니다. 당신은 AsyncTask에서 그들을 처리해야한다. – Pragnani

+0

글쎄, 나는 웹 사이트에서 데이터를 가져와 데이터베이스에 삽입하고있다. AsyncTask를 어떻게 추가할까요? – n00b

+0

그것은 AsyncTask에 대한 단순한 구글, 당신은 당신 자신에 의해 그것을 얻을 수 있습니다. 언제든지 의견을 말하지 않으면 답변을 게시 할 것입니다. – Pragnani

답변

4

"Pragnani"덕분에 나는 그것을 작동하게 만들었습니다. 여기에 최종 코드는 다음과 같습니다

private class ProgressTask extends AsyncTask<String, Void, Boolean> 
{ 
    private ProgressDialog dialog; 
    private ConfigurationActivity activity; 

    public ProgressTask(ConfigurationActivity activity) 
    { 
     this.activity = activity; 
     context = activity; 
     dialog = new ProgressDialog(context); 
    } 

    private Context context; 

    protected void onPreExecute() 
    { 
     dialog = new ProgressDialog(context); 
     dialog.setMessage("Prosimo počakajte da naloži podatke."); 
     dialog.setIndeterminate(false); 
     dialog.setCancelable(false); 
     dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     dialog.show(); 
    } 

    @Override 
    protected void onPostExecute(final Boolean success) 
    { 
     if (dialog.isShowing()) 
        { 
      dialog.dismiss(); 
     } 
     if (success) 
        { 
      Toast.makeText(context, "OK", Toast.LENGTH_LONG).show(); 
     } 
        else 
        { 
      Toast.makeText(context, "ERROR", Toast.LENGTH_LONG).show(); 
     } 
    } 

    @Override 
    protected Boolean doInBackground(final String... args) 
    { 
     try {  
      ... processing ... 

      return true; 
     } catch (Exception e){ 
      Log.e("Schedule", "UpdateSchedule failed", e); 
      return false; 
     } 
    } 

} 

클래스를 호출 :

new ProgressTask(ConfigurationActivity.this).execute(); 

감사 Pragnani!

관련 문제