2017-01-16 10 views
-5

Я хочу показать ProgressBar для моего WebView и он должен остановиться, как только загрузка закончена, вот мой код, но когда я называю ProgressBar он, показывая не удается разрешить метод findViewByIdНевозможно осуществить прогресс-бар вместе с WebView в фрагменте

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

Пожалуйста, пост код файла макета – avinash

+2

, если прогресс бар находится в какой-либо другой макет, то вам нужно раздувать этот макет и, если прогресс в том же макете затем инициализирует его со ссылкой rootView. –

+0

код файла макета включен @avinash –

ответ

5

1.) Ваш WebView и ProgressBar внутри Fragment макета, и вы используете inflater для инициализации и return макета фрагмента

2.) Таким образом, каждый вид макета фрагмента находится внутри rootView возвращенного inflater, и вы должны использовать это rootView для инициализации других представлений которые принадлежат к вашему Fragment

3.) Используйте переменную mwebView вместо создания локальной переменной view

4.) shouldOverrideUrlLoading это ничего не делать, так что добавьте view.load и вернуть 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

Это должно быть приемлемым ответом –

+0

, загружающий progressbar даже после завершения страницы, можете ли вы быть более конкретным для этого ответа @IntelliJAmiya –

+0

@Jaison_Joseph ваш 'shouldOverrideUrlLoading' имеет пустую реализацию, поэтому взгляните на реализация в моем ответе –