单击“提交”按钮时,为什么“进度”对话框未打开

时间:2016-12-20 11:37:59

标签: android android-progressbar

我已设置以太网IP。这里我在特定路径上创建文件并运行IP集代码,即sudo。

一切正常,但单击提交按钮时没有显示进度对话框,但setOnClickListener中提到的所有其他功能都正常工作。

任何人都可以帮助我。

 submt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            validationIP();
            if (var == true) {
                ProgressDialog progressdialog = new ProgressDialog(Third_Ethernet_Layout.this);
                progressdialog.setMessage("Please Wait....");
                progressdialog.show();
                progressdialog.setCancelable(false);
                progressdialog.setCanceledOnTouchOutside(false);
                try {
                    File file = new File(filepath);
                    file.createNewFile();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                write();
                sudo(ipfetch, netmaskfetch, gatewayfetch, dns1fetch, dns2fetch);
                progressdialog.dismiss();
                finish();
                Toast.makeText(Third_Ethernet_Layout.this, "Ethernet IP Change Successfully", Toast.LENGTH_SHORT).show();
            }
        }
    });

3 个答案:

答案 0 :(得分:2)

您正在使用progressdialog.dismiss();以便取消progressdialog。 您应该为其使用asunc任务

private class AsyncAboutUs extends AsyncTask<Void, Void, Void> {



        private ProgressDialog progressDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        progressdialog = new ProgressDialog(Third_Ethernet_Layout.this);
                progressdialog.setMessage("Please Wait....");
                progressdialog.show();
                progressdialog.setCancelable(false);
                progressdialog.setCanceledOnTouchOutside(false);

        }

        @Override
        protected Void doInBackground(Void... strings) {
           try {
                    File file = new File(filepath);
                    file.createNewFile();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                write();
                sudo(ipfetch, netmaskfetch, gatewayfetch, dns1fetch, dns2fetch);
return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            if (!isCancelled()) {
                finish();  
            }
            if (progressDialog != null && progressDialog.isShowing()) {
                progressDialog.dismiss();
            }

        }
    }

ON按钮单击:

submt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            validationIP();
            if (var == true) {

                 new AsyncAboutUs().execute();
            }
        }
    });

答案 1 :(得分:0)

显示进度对话框的代码工作正常,可能是进程很快,这就是为什么进度对话框不可见。 可以尝试使用线程睡眠来实际查看它是否存在问题。

答案 2 :(得分:0)

它确实显示了进度,但你通过调用dismiss()并进一步调用finish()来立即隐藏它。

但是,在处理程序中执行繁重的任务是实现所需目标的不正确方法。无论如何,这都行不通。将会发生的是,您的代码将阻止处理程序内的UI线程,并且不会显示任何进度(如果您保持足够长的时间,应用程序可能会被杀死)。

执行此操作的正确方法是实现AsyncTask,此文档链接中有一个简单的代码示例。您需要显示()进度对话框,执行异步任务,在doInBackground()中执行文件等代码,并在途中通过publishProgress更新进度值。 在onProgressUpdate()中,更新对话框或必填字段,最后在onPostExecute中执行finish()或完成后的其他操作。