2017-02-10 25 views
0

Я использую ProgressDialog для отображения статуса загрузки. Я добавил две кнопки: Cancel & Paused.ProgressDialog автоматически отклоняется после нажатия кнопки

Когда я нажимаю любую из кнопок, ProgressDialog уволен, но мне нужно, чтобы ProgressDialog не был автоматически уволен, так как мне приходится обрабатывать некоторые другие вещи.

Мой код:

ProgressDialog progressDialog; 
progressDialog = new ProgressDialog(this); 
progressDialog.setTitle("Please Wait.."); 
progressDialog.setMessage("Downloading"); 
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
progressDialog.setMax(100); 
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      Toast.makeText(MainActivity.this, "Canceled", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Paused", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 


      // DownloadManager.getInstance().pause(fileUrl); 
      Toast.makeText(MainActivity.this, "Paused", Toast.LENGTH_SHORT).show();\ 
     } 
    }); 

progressDialog.show(); 

Где проблема? [Примечание: Я не хочу, чтобы избежать увольнения когда пользователь нажимает вне progressDialog, но когда пользователь нажимает на любую кнопку]

+1

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

+2

Возможный дубликат [Как избежать отклонения моего диалога прогресса, когда пользователь касается экрана?] (http://stackoverflow.com/questions/15432476/how-to-avoid-dismissing-my -progress-dialog-when-the-user-touches-the-screen) – Marat

+1

с использованием 'use setCancelable (false)' будет препятствовать тому, чтобы пользователь отклонил прогрессDialog, щелкнув по экрану. – Sudarshan

ответ

2

Получить кнопки после progressDialog.show() и установить View.OnClickListener обрабатывать щелчки там.

ProgressDialog progressDialog = new ProgressDialog(this); 
progressDialog.setTitle("Please Wait.."); 
progressDialog.setMessage("Downloading"); 
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
progressDialog.setMax(100); 
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", 
     (DialogInterface.OnClickListener) null); 
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Pause", 
     (DialogInterface.OnClickListener) null); 
progressDialog.show(); 

progressDialog.getButton(DialogInterface.BUTTON_NEGATIVE) 
     .setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     // Handle "Cancel" button click here 
     Toast.makeText(MainActivity.this, "Canceled", Toast.LENGTH_SHORT).show(); 
    } 
}); 
progressDialog.getButton(DialogInterface.BUTTON_POSITIVE) 
     .setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     // Handle "Pause" button click here 
     Toast.makeText(MainActivity.this, "Paused", Toast.LENGTH_SHORT).show(); 
    } 
}); 
+0

Спасибо. Это работает .. – Sudarshan

-2

Хорошо я тебя .... И обновить мой ответ ...

вам нужно установить onClickListener после ProgressDialog было показано

myDialog = new ProgressDialog(this); 

myDialog.setCancelable(false); 
myDialog.setCanceledOnTouchOutside(false); 

// Create the button but set the listener to a null object. 
myDialog.setButton(DialogInterface.BUTTON_NEUTRAL, "start", 
    (DialogInterface.OnClickListener) null) 

// Show the dialog so we can then get the button from the view. 
myDialog.show(); 

// Get the button from the view. 
Button dialogButton = myDialog.getButton( 
DialogInterface.BUTTON_NEUTRAL); 

// Set the onClickListener here, in the view. 
dialogButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick (View view) { 

     if (isPrepared) { 
      myDialog.dismiss(); 

     } 

     // Dialog will not get dismissed unless "isPrepared". 

    } 

}); 

Использование setCanceledOnTouchOutside для диалога остановки dimiss на экране мыши в любом месте

dialog.setCanceledOnTouchOutside(false); 

setCancelable Используйте для диалога остановки смещать на клик аппаратной кнопку

dialog.setCancelable(false); 

Надеется, что это поможет вам обратно.

+0

Ни 'setCancelledOnTouchOutside', ни' setCancelable (false) 'не решает его проблему, поскольку он хочет предотвратить закрытие диалогового окна, когда кнопка, принадлежащая Диалоговое окно: –

+0

На самом деле я не хочу, чтобы вы не отклонялись, когда пользователь выходил за пределы progressDialog, но когда пользователь нажимает на любую кнопку. – Sudarshan

+0

У меня есть обновленный ответ. Проверьте сейчас. –

1

Это поведение по умолчанию для ProgressDialog. Вы можете либо попробовать описанный метод ProgressDialog: How to prevent automatic dismissing of Dialog inside setButton-Listener? (я бы не рекомендовал этого), либо создать собственный макет.

Edit:

В то время как мы на это, я могу предложить еще один неординарный подход.

Override dismiss():

public class MyProgressDialog extends ProgressDialog { 

public boolean close = true; 

@Override 
public void dismiss() { 
    if (close) { 
     super.dismiss(); 
    } else { 
     close = true; 
    } 
} 

и кликам кнопки, установите рядом с ложным первым.

Обратите внимание, что положение еще делает это один раз вещь, так что в следующий раз другая часть кода вызывает dismiss() он будет еще работать

+0

Я уже проверил ответ на ссылку. Но я столкнулся с проблемой также, то есть: если я хочу отклонить «ProgressDialog», щелкнув вне поля, «ProgressDialog» не отклоняется. – Sudarshan

+0

Вот почему я сказал, что не буду рекомендовать его. Это определенно будет иметь побочные эффекты, и вы обнаружили один –

+0

@ Сударшан Я просто подумал о другом способе, который, я думаю, поможет, я уверен, что он не вызовет никаких побочных эффектов. –

 Смежные вопросы

  • Нет связанных вопросов^_^