触摸屏幕时关闭进度对话框

Posted

技术标签:

【中文标题】触摸屏幕时关闭进度对话框【英文标题】:Progress Dialog is closed when touch on screen 【发布时间】:2013-11-08 11:02:34 【问题描述】:

我在线程中使用ProgressDialog。在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 会消失,但会获取所有数据。

【问题讨论】:

您的问题解决了吗?你的对话进展如何? 我使用了 dialog.setCanceledOnTouchOutside(getRetainInstance());这些代码对我来说很好用。 【参考方案1】:

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

yourDialog.setCanceledOnTouchOutside(false);

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

编辑

如果你使用DialogFragment,那么在调用show(FragmentManager mng, String tag)之前必须使用下面的代码sn-p

更多信息here。

dialogFragment.setCancelable(false);

编辑 2

小心使用 ProgressDialog ,因为 Android Oreo (v8.0) 现在已弃用它。

【讨论】:

我已经使用了这些 yourDialog.setCanceledOnTouchOutside(false);和 yourDialog.setCancelable(true);但它不起作用 尝试 dialog.setCancelable(false); Looper.loop() 之前; @Kailas 你把线放在哪里?我总是在创建对话框时放置这一行,而不是在 run() 函数上。 @Kailas 其他地方有问题;我宁愿使用 AsyncTask,您可以在其中创建一个 Dialog,还可以使用 onPreExecute() 和 onPostExecute() 来显示()和解除()它。 发现问题,使用AlertDialog 解决了我的问题。赞成:)【参考方案2】:
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) 上进行了测试

【讨论】:

这段代码如何理解何时获取数据?并用什么参数关闭对话框? 在您处理代码的第二个线程中。然后你可以关闭对话框。【参考方案3】:

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

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

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

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

希望对你有所帮助。

【讨论】:

【参考方案4】:

创建一个这样的类:

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_
    android:layout_
    android:layout_gravity="center"
    android:background="@android:color/transparent" >

    <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_
        android:layout_
        android:layout_centerInParent="true" />

</RelativeLayout>

用法是这样的:

Progresss.start(context);
Progresss.stop();

【讨论】:

以上是关于触摸屏幕时关闭进度对话框的主要内容,如果未能解决你的问题,请参考以下文章

触摸导航栏时关闭 PopOver 屏幕

当用户触摸屏幕时,删除图像上的模糊效果[关闭]

通过外部触摸事件关闭对话框不起作用

触摸整个应用程序时如何关闭键盘

使 iPad 屏幕关闭,但通过触摸唤醒(无锁定) - - iOS 6.0 / openFrameworks

导致MacBook 触摸板手势突然失效的原因都有哪些