如何加载图像之前落实进度对话框中的WebView? [英] How to implement the Progress Dialog in webview before loading an image?

查看:177
本文介绍了如何加载图像之前落实进度对话框中的WebView?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的应用程序网页视图具有加载图像,它加载它精致但它需要几秒钟就可以显示。所以我需要做的是显示一个进度对话框,告知该页面正在加载用户。 (该图像是从资产加载文件夹,而不是从网络),所以这是我的code SOFAR但崩溃,当我尝试运行该活动。

I have a webview in my app that has to load an image, it loads it fine however it takes a few seconds for it to display. So what i need to do is to display a progress dialog to inform the user that the page is loading. (this image is loading from assets folder and not from the web) So this is my code sofar but crashes when i try to run that activity.

public MapsFragment(){}
ProgressDialog progress;
WebView myWebView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_maps, container, false);

    WebView webview = (WebView)rootView.findViewById(R.id.webView2);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setLoadWithOverviewMode(true);
    webview.getSettings().setBuiltInZoomControls(true);
    webview.getSettings().setUseWideViewPort(false);
    webview.loadUrl("file:///android_asset/index1.html");

    webview.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            progress.show();
            view.loadUrl(url);
            return true;                
        }
        @Override
        public void onPageFinished(WebView view, final String url) {
            progress.dismiss();
        }
    });

    return rootView;
 }
}

然后是错误code表示是这样的:

And then the error code for this is:

11-08 13:19:34.034: E/AndroidRuntime(20600): FATAL EXCEPTION: main
11-08 13:19:34.034: E/AndroidRuntime(20600): Process: com.test.testguide, PID: 20600
11-08 13:19:34.034: E/AndroidRuntime(20600): java.lang.NullPointerException
11-08 13:19:34.034: E/AndroidRuntime(20600):    at com.test.testguide.MapsFragment$1.onPageFinished(MapsFragment.java:42)
11-08 13:19:34.034: E/AndroidRuntime(20600):    at com.android.webview.chromium.WebViewContentsClientAdapter.onPageFinished(WebViewContentsClientAdapter.java:449)
11-08 13:19:34.034: E/AndroidRuntime(20600):    at com.android.org.chromium.android_webview.AwContentsClient$AwWebContentsObserver$1.run(AwContentsClient.java:73)
11-08 13:19:34.034: E/AndroidRuntime(20600):    at android.os.Handler.handleCallback(Handler.java:733)
11-08 13:19:34.034: E/AndroidRuntime(20600):    at android.os.Handler.dispatchMessage(Handler.java:95)
11-08 13:19:34.034: E/AndroidRuntime(20600):    at    android.os.Looper.loop(Looper.java:136)
11-08 13:19:34.034: E/AndroidRuntime(20600):    at android.app.ActivityThread.main(ActivityThread.java:5586)
11-08 13:19:34.034: E/AndroidRuntime(20600):    at java.lang.reflect.Method.invokeNative(Native Method)
11-08 13:19:34.034: E/AndroidRuntime(20600):    at java.lang.reflect.Method.invoke(Method.java:515)

请帮助,因为我用Google搜索关于这个这么多的问题,并可能似乎无法找到一个解决方案。结果
谢谢!

Please help, as i have googled so many questions regarding this and couldn't seem to find a solution.
Thank you!

修改

IHAVE由myWebView纠正错误,并改回web视图,从而导致进入一个新的错误。请参阅更新的问题。

Ihave corrected the error by myWebView and changed back to webview, Thus resulting into a new error. Please see updated question

EDIT2

@Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            progress = new ProgressDialog(getActivity());
            progress.setMessage("Please wait...");
            progress.setIndeterminate(false);
            progress.setCancelable(false);
            progress.show();
            view.loadUrl(url);
            return true;                
        }
        @Override
        public void onPageFinished(WebView view, final String url) {
            progress.dismiss();
        }
    });

但是,这似乎仍然有同样的错误崩溃

But this still seem to crash with same errors

推荐答案

您还没有初始化进度对话框,

You have not initialize your progress dialog,

progress= ProgressDialog.show(this, "Title","Message", true);

        progress= new ProgressDialog(getActivity());
        progress.setMessage("Please wait...");
        progress.setIndeterminate(false);
        progress.setCancelable(false);
        progress.show();

和可以调用progress.dismiss()来隐藏对话框

and you can call progress.dismiss() to hide the dialog

修改

View rootView = inflater.inflate(R.layout.fragment_maps, container, false);
WebView webview = (WebView)rootView.findViewById(R.id.webView2);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setLoadWithOverviewMode(true);
webview.getSettings().setBuiltInZoomControls(true);
webview.getSettings().setUseWideViewPort(false);
webview.loadUrl("file:///android_asset/index1.html");
progress= new ProgressDialog(getActivity());
webview.setWebViewClient(new WebViewClient(){
  @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        progress.setMessage("Please wait...");
        progress.setIndeterminate(false);
        progress.setCancelable(false);
        progress.show();
        view.loadUrl(url);
        return true;                
    }
    @Override
    public void onPageFinished(WebView view, final String url) {
        progress.dismiss();
    }
});

return rootView;
}

这篇关于如何加载图像之前落实进度对话框中的WebView?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆