我的应用程序中有一个 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/