2017-02-10 13 views
0

私はProgressDialogを使用してダウンロード状況を表示しています。私はCancel & Pausedという名前の2つのボタンを追加しました。ボタンをクリックすると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外のときに、ユーザーのクリックを却下したくはありませんが、どのユーザーがボタンをクリック]

[OK]を
+1

デフォルト動作です。そのカスタムレイアウトを作成する必要があります –

+2

[ユーザーが画面に触れたときに進行状況ダイアログを消さないようにするにはどうすればいいですか?](http://stackoverflow.com/questions/15432476/how-to-avoid-dismissing-my -progress-dialog-when-user-touches-the-screen) – Marat

+1

'use setCancelable(false)'を使用すると、ユーザは画面の外をクリックしてprogressDialogを閉じるのを防ぎます。 – 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

私はあなたを取得します....そして、私の答えを更新...

ProgressDialogが停止ダイアログの使用setCanceledOnTouchOutside

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". 

    } 

}); 

を示された後、あなたは、任意の場所

dialog.setCanceledOnTouchOutside(false); 
クリック画面上dimiss onClickListenerを設定する必要があります3210

使用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?の方法を試してみるか(これはお勧めしません)、カスタムレイアウトを作成することができます。

編集:

我々はそれに取り組んでいる一方で、私は別の非正統的なアプローチを提案することができます。

オーバーライドdismiss()

public class MyProgressDialog extends ProgressDialog { 

public boolean close = true; 

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

と、ボタンのクリックで、近い偽最初に設定します。コードの他の部分はdismiss()呼び出す次回は、それはまだ動作しますように、else句は、それを1時間の事を作ること

+0

私は既にリンクの回答を確認しました。しかし、私は問題に直面しました。つまり、ProgressDialogをボックスの外側でクリックして却下したいのであれば、 'ProgressDialog'は却下されません。 – Sudarshan

+0

だから、私はそれをお勧めしないと言った理由です。それは間違いなく副作用があるとあなたが1つを発見した –

+0

@Sudarshan私は助けてくれると思う別の方法を考えた、私はそれが副作用を引き起こすことはないと確信している –

関連する問題