2012-08-22 160 views
0

我試圖向用戶顯示登錄對話框(自定義視圖的自定義對話框),然後單擊「登錄」時,我試圖顯示ProgressDialog,然後關閉它登錄已完成。未顯示Android ProgressDialog

問題是我無法獲得ProgressDialog顯示。

這裏是我的代碼:

private final MyActivity activity; 

    public MyPresenter(MyActivity activity) { 
     this.activity = activity; 
    } 

    public Dialog getLoginSignupDialog() { 
     final Dialog dialog = new Dialog(activity); 
     dialog.setContentView(R.layout.dialog_signup); 
     dialog.setTitle("Login"); 
     final TextView email = (TextView)dialog.findViewById(R.id.textViewEmail); 
     final TextView password = (TextView)dialog.findViewById(R.id.textViewPassword); 
     Button signupButton = (Button)dialog.findViewById(R.id.buttonSignup);   
     signupButton.setOnClickListener(new OnClickListener() {     
      public void onClick(View v) { 
       ProgressDialog progressDialog = null; 

       try { 
        progressDialog = ProgressDialog.show(activity, "", "Signing up...",false); 
        activity.signup(email.getText().toString(), password.getText().toString()); 
        progressDialog.dismiss(); 
        dialog.dismiss(); 
       } catch (ParseException e) { 
        if (progressDialog != null) progressDialog.dismiss(); 
        Toast.makeText(activity, "Sorry, an error occured.", Toast.LENGTH_SHORT).show(); 
        e.printStackTrace(); 
       } 
      } 
     });  
     return dialog; 
    } 

此代碼是在演示當中去的傳遞主要活動實例。只是爲了保持UI邏輯獨立。

在主要活動(onCreate),我這樣做:

showDialog(DIALOG_SIGNUP); 

然後我重寫onCreateDialog方法:

@Override 
protected Dialog onCreateDialog(int id) { 
    Dialog dialog = null; 
    switch (id) { 
     case DIALOG_SIGNUP: { 
      dialog = presenter.getLoginSignupDialog();        
      break; 
     } 
    } 
    return dialog; 

} 

其他對話框(自定義登錄一個)被顯示精細,一切正常,關閉等,但我無法得到ProgressDialog顯示。

我在做什麼錯了?

回答

0

你應該做的註冊活動作爲的AsyncTask如下:

new AsyncTask<String, Void, Void>() { 


     ProgressDialog progressDialog=null; 


     @Override 
     protected void onPreExecute() { 
      progressDialog = ProgressDialog.show(activity, "", "Signing up...",false); 
     } 

     @Override 
     protected Void doInBackground(String... params) { 
      try { 
       activity.signup(params[0], params[1]); 

      } catch (ParseException e) { 
       Toast.makeText(activity, "Sorry, an error occured.", Toast.LENGTH_SHORT).show(); 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      if (progressDialog != null) progressDialog.dismiss(); 
      dialog.dismiss(); 
     } 
    }.execute(email.getText().toString(), password.getText().toString()); 
+0

我沒有得到這個...我在哪裏可以使用?我是否在我的onClick事件中使用AsyncTask代碼? – RPM1984

+0

真棒,工作美麗...乾杯! – RPM1984

0

我認爲這將有助於把你的進度對話框放到你的函數activity.signup()中,並在那裏解僱它。 這應該在主UI線程中創建對話框。

也許你應該爲你的登錄過程使用AsyncTask。