2017-09-26 11 views
1

私はカスタムを作成しましたProgress DialoguesetCancelable()setCanceledOnTouchOutside()のようなプロパティを無効にすることはできません。Androidカスタムプログレスダイアログ - setCancelable()

public class CustomProgressDialogue extends ProgressDialog { 

    private final Context context; 

    public CustomProgressDialogue(Context context) { 
     super(context); 
     this.context = context; 
     getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.progress_view); 

    } 

    // Didn't worked 
    @Override 
    public void setCancelable(boolean flag) { 
     super.setCancelable(false); 
    } 
    // Didn't worked 
    @Override 
    public void setCanceledOnTouchOutside(boolean cancel) { 
     super.setCanceledOnTouchOutside(false); 
    } 
} 

インスタンス作成後に同じプロパティを適用すると同時に同じ時間が適用されます。

// Worked 
progressDialogue = new CustomProgressDialogue(getContext()); 
     progressDialogue.setCancelable(false); 
     progressDialogue.setCanceledOnTouchOutside(false); 

誰かがこれを説明できますか?

+1

なぜ 'MetricsProgressDialogue'を設定しますか? 'CustomProgressDialogue'の代わりに? –

+0

申し訳ありませんがコピー貼り間違いでした。今修正しました –

答えて

1

の代わりに、キャンセル可能なメソッドをオーバーライドしてみてくださいし、必要なオプションに

を渡すことができますが、ここでProgressDialogクラスはこれを行う方法は次のとおりです。

public static ProgressDialog show(Context context, CharSequence title, 
      CharSequence message, boolean indeterminate, 
      boolean cancelable, OnCancelListener cancelListener) { 
     ProgressDialog dialog = new ProgressDialog(context); 
     dialog.setTitle(title); 
     dialog.setMessage(message); 
     dialog.setIndeterminate(indeterminate); 
     dialog.setCancelable(cancelable); 
     dialog.setOnCancelListener(cancelListener); 
     dialog.show(); 
     return dialog; 
    } 
+1

これは良いone.Nowだけ私はProgressDialogソースコードを確認します。 –

1

あなたは、このような静的メソッドを作成し、このよう

public class CustomProgressDialogue extends ProgressDialog 
    { 

     public static ProgressDialog(Context context) { // This section create Main role . 
     CustomProgressDialogue dialog = new CustomProgressDialogue (context); 
     dialog.setCancelable(false); // Add this 
     return dialog; 
     } 

     public CustomProgressDialogue (Context context) { 
     super(context); 
     } 

     public CustomProgressDialogue (Context context, int theme) { 
     super(context, theme); 
     } 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.progress_view); 


     } 

     @Override 
     public void show() { 
     super.show(); 

     } 

     @Override 
     public void dismiss() 
     { 
     super.dismiss(); 

     } 

    } 
+1

私の解決策は間違っていました。コンテキストに関する問題がありますか? –

+0

@DonChakkappanかもしれません。私はわかりません 。この方法で使用できます。 FYI。 'static ProgressDialog'はここでピボットロールを作成します。 –

+1

Umarの答えは多少aptです。私はあなたに投票します:) –

0

あなたはキャン追加

public static ProgressDialog(Context context) { 
     CustomProgressDialogue dialog = new CustomProgressDialogue (context); 
     dialog.setCanceledOnTouchOutside(false); 
     return dialog; 
     } 

私の方法は

final AlertDialog alertD = new AlertDialog.Builder(context).create(); 
    alertD.setCanceledOnTouchOutside(false); 

が仕事です...!

0

コードの問題は、CustomDialogクラスのcancelableおよびOutsideTouchCancelをオーバーライドしていますが、ProgressDialogクラスの元のコードを置き換えていないことです。コンストラクタでsuper(コンテキスト)を呼び出すと、CancelableとOutsideTouchCancelの関数でビルドされたダイアログが開始されます。

だから、CustomDialogのあなたのコンストラクタで明示的にあなたがあなたのカスタムクラスでこれらの関数をオーバーライドする必要はありません

dialog.setCancelable(false); 
dialog.setCanceledOnTouchOutside(false) 

を呼び出す必要があります。

関連する問題