网络不可用时如何在屏幕上保留AlertDialog

时间:2017-12-27 13:15:52

标签: android networking

我使用以下代码显示AlertDialog并提示用户按"重试"。对话框应保留在屏幕上,直到连接可用。该应用程序正常工作,当网络不可用时,对话框出现。

mProgressBar = new ProgressBar(MainGroupActivity.this);
        AlertDialog.Builder builder = new AlertDialog.Builder(MainGroupActivity.this);
        builder.setTitle("Not Connected")
                .setIcon(R.drawable.disconnect)
                .setView(mProgressBar)
                .setMessage("You are not connected to the Internet")
                .setPositiveButton("Retry", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //Retry connection
                        if(isNetworkAvailable ())
                            mDialog.dismiss();
                    }
                });
        mDialog = builder.create();
        if( !isNetworkAvailable() )
            mDialog.show();

问题是,只要我触摸屏幕上的某个位置或按重试,对话框就会被取消!我怎么能防止这种情况?

4 个答案:

答案 0 :(得分:1)

setCancelable(false)将适合您。

AlertDialog.Builder builder = new AlertDialog.Builder(MainGroupActivity.this);
    builder.setTitle("Not Connected")
            .setIcon(R.drawable.disconnect)
            .setView(mProgressBar)
            .setCancelable(false)
            .setMessage("You are not connected to the Internet")
            .setPositiveButton("Retry", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    //Retry connection
                    if(isNetworkAvailable ())
                        mDialog.dismiss();
                }
            });

答案 1 :(得分:1)

您可以使用setCanceledOnTouchOutside(false)

 AlertDialog mDialog = builder.create();
    mDialog.setCanceledOnTouchOutside(false);
        mDialog.show();

但这样可以防止外部触摸而不是正面或负面按钮点击。其AlertDialog的默认行为是关闭任何按钮上的对话框,单击是否调用dismiss()。因此,如果你想要克服这种行为,你可以做这样的事情。

 AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Not Connected")
            .setIcon(R.drawable.ic_play_icon)
            .setView(R.layout.item_dialog)
            .setCancelable(false)
            .setMessage("You are not connected to the Internet");
    final AlertDialog mDialog = builder.create();
    mDialog.setCanceledOnTouchOutside(false);
    mDialog.setOnShowListener(new DialogInterface.OnShowListener() {

        @Override
        public void onShow(DialogInterface dialogInterface) {
            Button button =  mDialog.getButton(AlertDialog.BUTTON_POSITIVE);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //Do your validations task here

                }
            });
        }
    });
    mDialog.show();

答案 2 :(得分:0)

在构建setCancelable(false)时添加alertDialog

mProgressBar = new ProgressBar(MainGroupActivity.this);
        AlertDialog.Builder builder = new AlertDialog.Builder(MainGroupActivity.this);
        builder.setTitle("Not Connected")
                .setIcon(R.drawable.disconnect)
                .setView(mProgressBar)
                .setMessage("You are not connected to the Internet")
                .setCancelable(false)
                .setPositiveButton("Retry", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //Retry connection
                        if(isNetworkAvailable ())
                            mDialog.dismiss();
                    }
                });
        mDialog = builder.create();
        if( !isNetworkAvailable() )
            mDialog.show();

答案 3 :(得分:0)

要防止对话框在按下后退键时被解除,请使用此

dialog.setCancelable(false);

为了防止对话框在外部触摸时被解雇,请使用此

 dialog.setCanceledOnTouchOutside(false);

进一步帮助看一下这个问题: Prevent Android activity dialog from closing on outside touch