16

ProgressDialog在线程中使用 a 。在线onButtonClick程中启动,但是当我触摸屏幕上的任何地方时,它就ProgressDialog关闭了。

我怎样才能防止这种情况?

private void ButtonClick(View view) {

    btn1 = (Button) view.findViewById(R.id.btn1);
    btn1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            GetStudentData();
        }
    });
}

private synchronized void GetStudentData() {  
    try {
        // Thread to display loader
        new Thread() {
            @Override
            public void run() {
                Looper.prepare();
                dialog = Msg.ShowProgressDialogBox(
                    getActivity(),
                    dialog,
                    "Please wait while we fetch the student data...");
                Looper.loop();
            }
        }.start();

        new Thread() {
            @Override
            public void run() {
                String studentData="Kailas";
            }   
        }
    } catch(Exception ex {
    }
}

更新

当我触摸屏幕时,它ProgressDialog会消失,但会获取所有数据。

4

4 回答 4

55

将此添加到您的对话框中:

yourDialog.setCanceledOnTouchOutside(false);

这样你就可以触摸屏幕了,Dialog 不会被取消。

编辑

如果您正在使用,那么您必须在调用show(FragmentManager mng, String tag)DialogFragment之前使用以下代码片段:

更多信息在这里

dialogFragment.setCancelable(false);

编辑 2

请注意ProgressDialog,因为Android Oreo (v8.0)现在已弃用它。

于 2013-10-29T10:34:55.717 回答
5
private synchronized void GetStudentData() {

    try {
    // Thread to display loader
    new Thread() {
        @Override
        public void run() {
            Looper.prepare();
            dialog = Msg.ShowProgressDialogBox(getActivity(),
                    dialog,
                    "Please wait while we fetch the student data...");
            dialog.setCanceledOnTouchOutside(getRetainInstance());
            Looper.loop();
        }
    }.start();

    new Thread() {

        @Override
        public void run() {
                  String studentData="Kailas";
         }   
    }
}

我已经使用了这条线dialog.setCanceledOnTouchOutside(getRetainInstance()); 它在我的android 设备 OS(4.0.1) 中运行良好,也在 OS(2.6.3) 上测试过

于 2013-10-29T12:24:21.683 回答
3

当您进行某些重要的数据下载过程时,您可以使用以下代码使进度对话框无法取消:

mDialog.setCancelable(false);
mDialog.setCanceledOnTouchOutside(false);
mDialog.setOnCancelListener(new Dialog.OnCancelListener() {

    @Override
    public void onCancel(DialogInterface dialog) {
        // DO SOME STUFF HERE
    }
}

如果您在项目中使用,您也可以在操作栏中查看进度条。

希望它会帮助你。

于 2013-10-29T10:48:03.173 回答
2

制作这样的课程:

public class Progresss {

    static ProgressDialog dialog;

    public static void start(Context context) {
        dialog = new ProgressDialog(context);
        try {
            dialog.show();
        } catch (BadTokenException e) {
        }
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.progressdialog123);
        // dialog.setMessage(Message);
        // return dialog;
    }

    public static void stop() {
        if(dialog!=null)
            dialog.dismiss();
    }
}

这是布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@android:color/transparent" >

    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

</RelativeLayout>

用法是这样的:

Progresss.start(context);
Progresss.stop();
于 2014-04-08T13:50:16.437 回答