阻止ProgressDialog被onClick解雇

时间:2013-09-02 18:31:51

标签: android progressdialog onclicklistener android-button android-dialog

我使用ProgressDialog向用户显示他必须等待并且在用户必须等待时使我的应用程序的表面“不可触及”。我在progressDialog中添加了一个Button,如果某些条件为真,它应该启动一些操作。问题是,每次用户按下按钮时,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();

3 个答案:

答案 0 :(得分:9)

在显示ProgressDialog之后设置OnClickListener

与Android中提供的其他Dialog不同,ProgressDialog没有setNeutralButton()方法,因此您需要在onClickListener之后设置ProgressDialog }已经显示出来了,如下:

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

    }

});

答案 1 :(得分: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

    final AlertDialog dialog = new AlertDialog.Builder(getActivity())
            .setTitle("Enter Credentials")
            .setView(v)
            .setPositiveButton("OK", null)
            .create();

答案 2 :(得分:0)

在Android 4.2.2上添加connectingDialog.setCancelable(false);对我来说已经足够了