【问题标题】:Dismissing ProgressDialog after WebPage finishes loading网页完成加载后关闭 ProgressDialog
【发布时间】:2014-05-14 07:22:21
【问题描述】:

我正在将 URL 加载到 WebView 中。这是一个登录页面。当用户通过身份验证时,他会看到一个页面。我此时停止加载并开始另一个活动。

当点击登录按钮时,用户被重定向到第一个 url。我此时开始一个进度对话框。在他到达经过身份验证的页面后,我想停止进度对话框并直接显示新活动。我不希望用户看到经过身份验证的页面。

现在,“进度”对话框在经过身份验证的页面处停止。用户看到它,然后向他展示下一个活动

关于如何实现这一点的任何帮助?

这是我的代码:-

myWebView.getSettings().setJavaScriptEnabled(true);

            myWebView.loadUrl(url);

            final ProgressDialog progressBar = ProgressDialog.show(Details1.this, "Loading..", "Please wait!");

            myWebView.setWebViewClient(new WebViewClient()
            {



                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) 
                {
                    // TODO Auto-generated method stub
                    super.onPageStarted(view, url, favicon);
                    url= view.getUrl();
                    redirected= Uri.decode(url);

                        if(redirected!=null &&redirected.contains("Visited"))
                        {
                            myprogressDialog= new Utility.ProgressDialogFragment().newInstance();
                            myprogressDialog.show(getFragmentManager(), "Wait");
                        }

                }

                @Override
                public void onPageFinished(WebView view, String url) 
                {
                    // TODO Auto-generated method stub
                    super.onPageFinished(view, url);
                    url= view.getUrl();
                    redirected= Uri.decode(url);

                        if(progressBar!=null && progressBar.isShowing())
                        {
                            progressBar.dismiss();
                        }






                 if(redirected!=null && redirected.startsWith(endpointHost+"/Authorize/index/"+device))//&& myprogressDialog!=null && myprogressDialog.isVisible())
                    {



                             myWebView.stopLoading();

                        myprogressDialog.dismiss();


                        String authorizationContentString =  myurl;
                        authorizationContentString =authorizationContentString.replace("|", "%7C");


                        new AuthenticateDevice(Details1.this,  Url).execute(authorizationContentString);




                    }



                }


                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url)
                {
                    // TODO Auto-generated method stub
                    view.loadUrl(url);


                    return true;

                }


            });

        }
        private static class ProgressDialogFragment extends DialogFragment
        {
             public static ProgressDialogFragment newInstance()
                {
                    return new ProgressDialogFragment();
                }

                @Override
                public void onCreate(Bundle savedInstanceState)
                {
                    super.onCreate(savedInstanceState);
                    setStyle(STYLE_NO_FRAME, android.R.style.Theme_Translucent);
                }

                @Override
                public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
                {
                    return inflater.inflate(R.layout.fragment_dialog_progress, container, false);
                }
        }
}

【问题讨论】:

  • 你到底需要什么??我不明白你..
  • @Lal 我想在显示经过身份验证的页面后停止进度对话框。这是一个对话框片段。我不希望显示经过身份验证的页面并直接切换到下一个活动。这样在登录后直接向用户显示下一个活动
  • 当 onPageStarted() 以特定 url 开始时开始您的新活动,让 webview 到 onPageFinished() 并在那里停止 progDialog 并完成 webview 活动。这样网络视图将位于堆栈中的新活动下,并且网络视图将对用户隐藏。
  • @Sripathi 你能详细说明一下我的代码吗?
  • @user3627247 请看我的帖子。

标签: android url webview progressdialog


【解决方案1】:
myWebView.getSettings().setJavaScriptEnabled(true);

            myWebView.loadUrl(url);

            final ProgressDialog progressBar = ProgressDialog.show(Details1.this, "Loading..", "Please wait!");

            myWebView.setWebViewClient(new WebViewClient()
            {


                boolean toStopLoading = false;
                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) 
                {
                    // TODO Auto-generated method stub
                    super.onPageStarted(view, url, favicon);
                    url= view.getUrl();
                    redirected= Uri.decode(url);

                        if(redirected!=null &&redirected.contains("Visited"))
                        {
                            myprogressDialog= new Utility.ProgressDialogFragment().newInstance();
                            myprogressDialog.show(getFragmentManager(), "Wait");
                            toStopLoading = true;
                           // start your new activity here.
                        }

                }

                @Override
                public void onPageFinished(WebView view, String url) 
                {
                    // TODO Auto-generated method stub
                    super.onPageFinished(view, url);
                    url= view.getUrl();
                    redirected= Uri.decode(url);

                        if(progressBar!=null && progressBar.isShowing())
                        {
                            progressBar.dismiss();
                        }

                        if(toStopLoading){
                      // finish your web view activity here.
                        }



                 if(redirected!=null && redirected.startsWith(endpointHost+"/Authorize/index/"+device))//&& myprogressDialog!=null && myprogressDialog.isVisible())
                    {



                             myWebView.stopLoading();

                        myprogressDialog.dismiss();


                        String authorizationContentString =  myurl;
                        authorizationContentString =authorizationContentString.replace("|", "%7C");


                        new AuthenticateDevice(Details1.this,  Url).execute(authorizationContentString);


                    }



                }


                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url)
                {
                    // TODO Auto-generated method stub
                    view.loadUrl(url);


                    return true;

                }


            });

        }
        private static class ProgressDialogFragment extends DialogFragment
        {
             public static ProgressDialogFragment newInstance()
                {
                    return new ProgressDialogFragment();
                }

                @Override
                public void onCreate(Bundle savedInstanceState)
                {
                    super.onCreate(savedInstanceState);
                    setStyle(STYLE_NO_FRAME, android.R.style.Theme_Translucent);
                }

                @Override
                public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
                {
                    return inflater.inflate(R.layout.fragment_dialog_progress, container, false);
                }
        }
}

试试这个..

【讨论】:

  • AuthenticateDevice 是我的 AsyncTask 我正在开始我的新活动
  • 您提到您在重定向到第一个网址时正在开始新活动。我做了一些更改(设置一个布尔值 toStopLoading),请检查一下。并清楚地向我解释您需要什么,并要求 AsyncTask 进行验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
相关资源
最近更新 更多