показать диалог прогресса из пользовательского диалога - PullRequest
1 голос
/ 06 декабря 2011

Я пытаюсь показать диалог прогресса из пользовательского диалога, пока изображение загружается на сервер. Вот что у меня есть:

final Dialog mDialog = new Dialog(this, R.style.CustomDialogTheme);
mDialog.setContentView(R.layout.sendimage_dialog);
ImageView im = (ImageView)mDialog.findViewById(R.id.image_to_upload);
                        im.setImageURI(Constants.currImageURI);

Button upload = (Button)mDialog.findViewById(R.id.upload);

upload.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View view) {
    mDialog.dismiss();

});

mDialog.show();

mDialog.setOnDismissListener(new OnDismissListener(){

@Override
    public void onDismiss(DialogInterface di) {

                                ProgressDialog progress = new ProgressDialog(CameraActivity.this, R.style.CustomDialogTheme);
                                progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                                progress.setMessage("Please wait while your photo is being uploaded.");
                                progress.show();

                                String response = uploadUserPhoto(new File(getRealPathFromURI(Constants.currImageURI)));
                                try {
                                    parseResponse(response);
                                } catch (JSONException e) {
                                    Log.d(TAG, e.getMessage());
                                    e.printStackTrace();
                                }

                                progress.dismiss();
                                Toast.makeText(getApplicationContext(), "Using your computer, log into your graFighters account and your image will be waiting for you.", Toast.LENGTH_SHORT).show();

                            }

                        });

Проблема в том, что когда я нажимаю кнопку загрузки, мое диалоговое окно прогресса никогда не отображается. Есть идеи, почему это может быть?

Ответы [ 3 ]

1 голос
/ 06 декабря 2011

Это потому, что вы выполняете сетевой вызов (uploadUserPhoto) в основном потоке (UI), что означает, что пользовательский интерфейс не будет обновляться между вызовами show () и dismiss (). Если вы хотите, чтобы это работало, вы можете запустить отдельный рабочий поток, который вместо этого выполняет uploadUserPhoto. После того, как рабочий поток завершил свою работу, он должен дать сигнал активности, чтобы удалить диалоговое окно.

0 голосов
/ 06 декабря 2011

Вы должны использовать AlertDialog.Вот пример, который должен хорошо вписаться в ваш код:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Alert")
       .setMessage("Please wait while your photo is being uploaded.")
       .setNeutralButton("OK", new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int which) {
                   dialog.dismiss();
               })
       .show();

Я также рекомендую изучить использование AsyncTask и ProgressDialog .

0 голосов
/ 06 декабря 2011

Вы показываете и удаляете свой ProgressDialog в методе click.Что касается

mDialog.dismss

Это должно быть отклонение.Если вы создали собственный диалог, нам, возможно, понадобится увидеть его побольше, чтобы получить лучшую идею.

РЕДАКТИРОВАТЬ: и затем вызов этого диалогового окна для отображения вне вашего метода onClick.

...