如何在android Fragment中为webview显示全屏加载微调器?

Posted

技术标签:

【中文标题】如何在android Fragment中为webview显示全屏加载微调器?【英文标题】:How to show full screen loading spinner for webview in android Fragment? 【发布时间】:2014-08-25 06:56:34 【问题描述】:

我正在开发一个应用程序,它有一个片段可以在 webview 上显示网站。对于慢速连接,加载网站需要一些时间,并且应用程序会在几秒钟内变为空白,所以我想在我的片段中显示一个全屏加载微调器。我找到了源代码,但我不知道如何在我的扩展片段的类中实现它。

这是我想要在显示网站之前显示全屏加载的片段。

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) 
        View V = inflater.inflate(R.layout.fragment_a, container, false);

        String url="http://www.hotelsearcher.net/";
        Bundle args = getArguments();
        if (args  != null)
            url = args.getString("position");
        
        WebView webView= (WebView) V.findViewById(R.id.webView1);
        WebSettings webViewSettings = webView.getSettings();
        webViewSettings.setjavascriptCanOpenWindowsAutomatically(true);
        webViewSettings.setJavaScriptEnabled(true);
        webViewSettings.setPluginState(PluginState.ON);
        webView.setWebViewClient(new WebViewClient());
        adview =(AdView) V.findViewById(R.id.ads);
        Ads.loadAds(adview);
        webView.loadUrl(url);
        return V;

    

我发现这是代码:https://gist.github.com/daichan4649/5344979/download#

谁能告诉我应该写什么。实现该功能。

【问题讨论】:

【参考方案1】:

在您的onCreateView() 中,您需要显示ProgressBar,因为您的webView.loadUrl(url) 需要时间来加载您的WebView 上的互联网内容。因此,当您的WebView 完成加载您的内容时,您需要注册回电。你可以这样听:

mWebView.setWebViewClient(new WebViewClient() 

   public void onPageFinished(WebView view, String url) 
        // Cancel your ProgressBar here
    
);

在您的onPageFinished() 内取消您的ProgressBar,因为您的WebView 已完成加载内容。

工作代码

public class MainActivity extends Activity 

    private String url = "https://www.google.co.in/";
    ProgressDialog pb;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pb = new ProgressDialog(this);
        pb.setTitle("Connecting Station");
        pb.setMessage("Please Wait....");
        pb.setCancelable(false);
        pb.show();
        WebView webView = (WebView) findViewById(R.id.webView);
        WebSettings webViewSettings = webView.getSettings();
        webViewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webViewSettings.setJavaScriptEnabled(true);
        webViewSettings.setPluginState(PluginState.ON);
        webView.loadUrl(url);
        webView.setWebViewClient(new WebViewClient() 

            public void onPageFinished(WebView view, String url) 
                pb.dismiss();
            
        );
    

【讨论】:

请看看这个..应用程序崩溃..docs.google.com/document/d/… @MuhidulHassan 请发布您的 Logcat 以及 ProgressBar 代码。 我在这里更新了文档:docs.google.com/document/d/… 请注意,我只想全屏显示加载微调器.. 嗨..你找到解决办法了吗? @MuhidulHassan 是的,您将应用程序的上下文传递给您的ProgressDialog,而不是传递您的 Actvitiy 的上下文。

以上是关于如何在android Fragment中为webview显示全屏加载微调器?的主要内容,如果未能解决你的问题,请参考以下文章

在 Fragment Android Studio 中为解析器 JSON 创建类

[Android] FrameLayout 的作用

Android之Fragment的优点和作用

在 Adapter 或 Fragment 中为 ContactsContract 设置数据的 MIMETYPE

android ViewPager+Fragment 如何在ViewPager的Activity中获取Fragment中的控件对象

片段标签的使用