2012-08-22 155 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。