2017-01-16 1 views
-5

Je veux montrer un ProgressBar pour mon WebView et il devrait arrêter une fois le chargement terminé, voici mon code, mais quand je l'appelle ProgressBar il montrant Impossible de résoudre la méthode findViewByIdImpossible de mettre en œuvre barre de progression avec WebView dans le fragment

package com.fb.jaisonjoseph.facebookbasic; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.ViewGroup; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.ProgressBar; 

/** 
* A simple {@link Fragment} subclass. 
*/ 
public class Home_Fragment extends Fragment { 

public WebView mwebView; 
public Home_Fragment() { 

    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View rootView = inflater.inflate(R.layout.fragment_home_, null); 
    WebView view=(WebView) rootView.findViewById(R.id.webView); 
    view.loadUrl("https://mbasic.facebook.com"); 
    view.getSettings().setJavaScriptEnabled(true); 
    view.setWebViewClient(new MyWebViewClient()); 
    return rootView; 
} 

private class MyWebViewClient extends WebViewClient { 
    ProgressBar bar=(ProgressBar)findViewById(R.id.progressBar); 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     return false; 
    } 

    @Override 
    public void onPageStarted(final WebView view, final String url, final Bitmap favicon) { 
     bar.setVisibility(View.VISIBLE); 

     super.onPageStarted(view, url, favicon); 
    } 
    @Override 
    public void onPageFinished(WebView view, String url) { 
     bar.setVisibility(View.GONE); 

     super.onPageFinished(view, url); 
     } 
    } 

} 

fragment_home_.xml

<RelativeLayout 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.fb.jaisonjoseph.facebookbasic.Home_Fragment"> 

<!-- TODO: Update blank fragment layout --> 


<WebView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/webView" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentBottom="true" /> 

<ProgressBar 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/progressBar" 
    android:animationResolution="@integer/abc_max_action_buttons" 
    android:clickable="false" 
    android:theme="@style/Base.Theme.AppCompat" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" /> 

    </RelativeLayout> 
+0

S'il vous plaît afficher le code de fichier de mise en page – avinash

+2

est une autre mise en page, vous devez gonfler que la mise en page et si les progrès sont dans la même disposition initialiser ensuite avec référence rootView. –

+0

code du fichier de mise en page inclus @avinash –

Répondre

5

1.) Votre WebView et ProgressBar sont à l'intérieur Fragment mise en page et que vous utilisez inflater pour initialiser et return votre mise en page de fragment

2.) Ainsi, chaque vue de votre mise en page de fragment est à l'intérieur du rootView retourné par inflater et vous devez utiliser cette rootView pour initialiser vos autres vues qui appartiennent à votre Fragment

3.) Utilisez plutôt la variable mwebView de créer la variable locale view

4.) shouldOverrideUrlLoading ne fait rien, il faut donc ajouter view.load et retour si la barre de progression true

public class Home_Fragment extends Fragment { 

    public WebView mwebView; 
    ProgressBar bar; 

    // ^^^ declare bar 
    public Home_Fragment() { 

     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View rootView = inflater.inflate(R.layout.fragment_home_, null); 
     bar = (ProgressBar) rootView.findViewById(R.id.progressBar); 
     // initialize bar 

     mwebView = (WebView) rootView.findViewById(R.id.webView); 
     mwebView.loadUrl("https://mbasic.facebook.com"); 
     mwebView.getSettings().setJavaScriptEnabled(true); 
     mwebView.setWebViewClient(new MyWebViewClient()); 
     return rootView; 
    } 

    private class MyWebViewClient extends WebViewClient { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 

     @Override 
     public void onPageStarted(final WebView view, final String url, final Bitmap favicon) { 
      bar.setVisibility(View.VISIBLE); 
      // ^^^ use it as it is 

      super.onPageStarted(view, url, favicon); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      bar.setVisibility(View.GONE); 
      // ^^^ use it as it is 
      super.onPageFinished(view, url); 
     } 
    } 

} 
+2

Cela devrait être acceptable répondre –

+0

en chargeant la barre de progression même après la fin de la page, pouvez-vous être plus précis pour cette réponse @IntelliJAmiya –

+0

@Jaison_Joseph votre 'shouldOverrideUrlLoading' a une implémentation vide alors jetez un oeil à la mise en œuvre dans ma réponse –