android - 如何在加载图像之前在 webview 中实现进度对话框?

标签 android android-webview

我的应用程序中有一个 webview 必须加载图像,它可以正常加载,但需要几秒钟才能显示。所以我需要做的是显示一个进度对话框以通知用户页面正在加载。 (这张图片是从 Assets 文件夹加载的,而不是从网络加载的)所以这是我的代码,但是当我尝试运行该 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;
 }
}

然后错误代码是:

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)

请帮忙,因为我已经用谷歌搜索了很多与此相关的问题,但似乎找不到解决方案。
谢谢!

编辑

我已通过 myWebView 更正错误并改回 webview,从而导致新错误。请查看更新的问题

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();
        }
    });

但这似乎仍然因为同样的错误而崩溃

最佳答案

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

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() 来隐藏对话框

编辑

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;
}

关于android - 如何在加载图像之前在 webview 中实现进度对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26816524/

相关文章:

android - Android studio-Gradle版本为2.14.1。当前版本是2.10

android - ndk-gdb具有gradle风格

android - Textview setCompoundDrawables 不改变或显示

android-webview - "body background-color: transparent"不会影响android 4.0.3的webview

javascript - 安卓浏览器 : fill vertical viewport?

php - 如何将值从 React Native 状态传递到 WebView

javascript - Android 版格子链接

java - 设计Android应用程序后端

android - 小部件出现在小部件预览中但不在 Android 4 的小部件列表中

android - 如何使用 Jsoup 向 html 内容添加填充?