5

私は ProgressDialog を使用して、ユーザーが待たなければならないことをユーザーに示し、ユーザーが待たなければならない間、アプリの表面を「手に負えない」ようにします。特定の条件が真の場合にいくつかのアクションを開始するボタンを progressDialog に追加しました。問題は、ユーザーがボタンを押すたびに、progressDialog が自動的に閉じられることです。アクションがトリガーされなくても。onClick が呼び出されたときに、progressDialog が閉じられないようにするにはどうすればよいですか?

thx&よろしく

編集:

    connectingDialog = new ProgressDialog(this);
    connectingDialog.setCancelable(false);
    connectingDialog.setCanceledOnTouchOutside(false);
    connectingDialog.setButton(DialogInterface.BUTTON_NEUTRAL, "start", new DialogInterface.OnClickListener(){

        @Override
        public void onClick(DialogInterface arg0, int arg1) {
            /*if(isPrepared)
                startGame();*/
            connectingDialog.show(); // does not work, too
        }

    });
    connectingDialog.show();
4

3 に答える 3

9

OnClickListenerProgressDialog が表示された後を設定します。

DialogAndroid で利用可能な他の の一部とは異なり、 にProgressDialogはメソッドがないため、 が表示された後にを次のsetNeutralButton()ように設定する必要があります。onClickListenerProgressDialog

connectingDialog = new ProgressDialog(this);

connectingDialog.setCancelable(false);
connectingDialog.setCanceledOnTouchOutside(false);

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

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

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

// Set the onClickListener here, in the view.
dialogButton.setOnClickListener( new View.OnClickListener() {

    @Override
    public void onClick ( View view ) {

        if (isPrepared) {
             connectingDialog.dismiss();
             startGame();
        }

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

    }

});
于 2014-07-19T18:02:09.753 に答える
1

あなたが抱えている問題は、 ProgressDialog が Dialog/AlertDialog から継承され、デフォルトでは、ダイアログのボタンを押すと、それがどのボタンであるかに関係なく(正/負など)、それらが消えてしまうことです。

これを回避するには、ボタンをインターセプトしてそのリスナーをオーバーライドしますが、これはダイアログが作成された後にのみ行うことができます。

これを行うには他の方法があるかもしれませんが、私はこの方法をうまく使用しました。コードの例を次に示します。

    dialog.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialogInterface) {
            Button b = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
            b.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    String username = user.getText().toString();
                    String password = pass.getText().toString();
                    if (username != null && username.length() > 0 && password != null && password.length() > 0) {
                        // store credentials in preferences here
                        dialog.dismiss()
                    } else {
                        Toast.makeText(getActivity(), "Username and/or password cannot be blank.", Toast.LENGTH_SHORT).show();
                        user.requestFocus();
                    }
                }
            });
        }
    });

ご覧のとおり、これを使用して、ユーザーがダイアログを閉じる前に実際に何かを入力したことを検証できるようにEditTextします。そうでない場合は、入力を求めます。

編集:

OnClickListener最初にボタンに null を渡す必要があることに注意してください。

    final AlertDialog dialog = new AlertDialog.Builder(getActivity())
            .setTitle("Enter Credentials")
            .setView(v)
            .setPositiveButton("OK", null)
            .create();
于 2013-09-02T23:15:43.347 に答える
0

Android 4.2.2では追加connectingDialog.setCancelable(false);で十分でした

于 2015-03-26T12:22:28.780 に答える