进度对话框不会消失,似乎会中断URL加载

时间:2015-11-15 11:49:26

标签: java android

我有一个WebView,当它加载一个站点时,会显示一个ProgressDialog。它在您第一次打开应用程序时工作正常,但是当您单击链接时它只是出现并且在您点击外部之前不会消失。它似乎也是用户点击的链接没有加载,但当我删除ProgressDialog的代码时,它工作正常。

提前致谢!

package *package URL*;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class TabFragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,                 Bundle savedInstanceState) {
    View mainView = (View) inflater.inflate(R.layout.fragment_tab_fragment1, container, false);

    WebView webViewNews = (WebView) mainView.findViewById(R.id.webViewNews);

    webViewNews.getSettings().setJavaScriptEnabled(true);
    webViewNews.setVerticalScrollBarEnabled(false);
    webViewNews.setHorizontalFadingEdgeEnabled(false);

    final ProgressDialog pd=new ProgressDialog(getActivity());
    webViewNews.setWebViewClient(new WebViewClient() {
        public void onPageFinished(WebView view, String url) {
            pd.dismiss();
        }
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            pd.show();
            return true;
        }
    });
    // this is necessary for "alert()" to work
    webViewNews.setWebChromeClient(new WebChromeClient());

    // load a page to get things started
    pd.show();

    webViewNews.loadUrl("http://google.com");
    return mainView;
}

}

1 个答案:

答案 0 :(得分:0)

我用onPageStarted和onPageFinished替换了ShouldOverrideUrlLoadning。出于美观原因,我还决定使用Spinner更改ProgressDialog。以下是我如何做到的说明。

在布局中添加一个微调器(也是微调器的包装器,但不是必需的)。

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#cc111111"
    android:id="@+id/pbWrapper">
    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:elevation="1000dp"/>
</RelativeLayout>

然后在你的onCreate

之前加上这个
private ProgressBar mPbar = null;
private RelativeLayout mPbarWrap = null;

然后你需要找到微调器(和包装器)

mPbar = (ProgressBar) mainView.findViewById(R.id.progressBar);
mPbarWrap = (RelativeLayout) mainView.findViewById(R.id.pbWrapper);

然后根据WebView中是否有更改来显示和隐藏微调器(和包装器)

webViewNews.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageStarted(WebView mainView, String url, Bitmap favicon) {
            mPbar.setVisibility(View.VISIBLE);
            mPbarWrap.setVisibility(View.VISIBLE);
        }

        public void onPageFinished(WebView view, String url) {
            mPbar.setVisibility(View.GONE);
            mPbarWrap.setVisibility(View.GONE);
        }
    });

希望这有帮助!