【问题标题】:Adding ProgressBar into WebView Fragment将 ProgressBar 添加到 WebView 片段中
【发布时间】:2015-11-09 12:54:16
【问题描述】:

我正在完成我的应用程序,是一个包含一些 WebView 片段和导航抽屉的简单应用程序,一切正常,但我不知道如何在 WebView 加载页面时添加进度条,我只在页面加载之前得到的是一个空白屏幕。

这是我的代码...

HomeFragment.java

public class HomeFragment extends Fragment {


private WebView webView;


public HomeFragment() {
    // Required empty public constructor
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View mainView = (View) inflater.inflate(R.layout.fragment_my_fragment1, container, false);
    WebView webView = (WebView)mainView.findViewById(R.id.webview);
    webView.setWebViewClient(new MantenerDominioWeb());
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setBuiltInZoomControls(false);
    webView.getSettings().setSupportZoom(false);
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.canGoBack();
    webView.goBack();
    webView.loadUrl("http://www.lfcchile.com/");
    return mainView;


}



@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
}

@Override
public void onDestroy() {
    super.onDestroy();
}

@Override
public void onDetach() {
    super.onDetach();
}
}

我的 WebViewClient 类

public class MantenerDominioWeb extends WebViewClient {

private WebView webView;
public ProgressBar progressBarT4;


@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (Uri.parse(url).getHost().endsWith("lfcchile.com") || (Uri.parse(url).getHost().endsWith("thisisanfield.com")) || (Uri.parse(url).getHost().endsWith("liverpoolecho.co.uk")) || (Uri.parse(url).getHost().endsWith("liverpoolfc.com"))) {
        return false;
    }

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    view.getContext().startActivity(intent);
    return true;
}

}

还有我的框架 XML

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.lfcchile.MyFragment1">

<!-- TODO: Update blank fragment layout -->
<TextView android:layout_width="match_parent" android:layout_height="match_parent"
    android:gravity="center"
    android:text="@string/homefrag" />

<WebView
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

<ProgressBar
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:id="@+id/progressBar1"/>

</FrameLayout>

有什么想法吗?我试图将进度条放在 WebView 的“前面”,但是当页面加载时,图标并没有消失......

【问题讨论】:

  • 您没有在代码中的任何地方使用该进度条
  • 这就是我寻求帮助的原因,我尝试了 onPageStarted 和 onPageFinished 但没有任何反应。

标签: android android-fragments webview android-progressbar


【解决方案1】:

我认为不可能放置进度条,因为每个站点都有一定的大小,在最终确定下载页面之前很难衡量它。

但是您可以在页面加载时放置预加载器(加载),然后在结束后删除用户的访问权限。

使用 ProgressDialog:

public class HomeFragment extends Fragment {

private ProgressDialog progress;
private WebView webView;


public HomeFragment() {
    // Required empty public constructor
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}



@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View mainView = (View) inflater.inflate(R.layout.fragment_my_fragment1, container, false);
        WebView webView = (WebView)mainView.findViewById(R.id.webview);
        webView.setWebViewClient(new MantenerDominioWeb());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setBuiltInZoomControls(false);
        webView.getSettings().setSupportZoom(false);
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.getSettings().setAllowFileAccess(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.canGoBack();
        webView.goBack();
        webView.loadUrl("http://www.lfcchile.com/");

        progress = ProgressDialog.show(this, "Aguarde...",
                    "Processando sua solicitação.", true);
        webView.setWebViewClient(new WebViewClient() {

           public void onPageFinished(WebView view, String url) {
                if (progress != null)
                    progress.dismiss();
            }
        });
        return mainView;


    }



@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
}

@Override
public void onDestroy() {
    super.onDestroy();
}

@Override
public void onDetach() {
    super.onDetach();
}
}

【讨论】:

  • 非常感谢!!这对我有用!但我不得不写“getActivity()”而不是“this”。
【解决方案2】:
  • 将您的 ProgressBar 设置为 visibility="gone" 以开始
  • 在您的WebViewClient 子类中,覆盖onPageStarted() 以将ProgressBar 的可见性设置为VISIBLE
  • 在您的WebViewClient 子类中,覆盖onPageFinished() 以将ProgressBar 的可见性设置为GONE
  • 创建一个覆盖onProgressChanged()WebChromeClient子类来更新ProgressBar的进度值
  • 通过调用WebView.setWebChromeClient()WebChromeClient 子类添加到WebView

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多