Equivocal
Equivocal

Reputation: 932

How can I display a progress dialog until web view is finished loading?

I have an activity that loads a fragment and inside that fragment is a web view how do I show the progress dialog for that fragment until all the web view contents are done loading?

My Fragment:

public class FragmentOne extends Fragment {


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

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

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    //Using the "View" to obtain the WebView
    View view = inflater.inflate(R.layout.fragment_one, container, false);

    //in app WebView
    WebView myFacebookWebView = (WebView) view.findViewById(R.id.webview_facebook);
    WebSettings webSettings = myFacebookWebView.getSettings();
    webSettings.setJavaScriptEnabled(true); 
    myFacebookWebView.setWebViewClient(new WebViewClient());
    myFacebookWebView.setWebChromeClient(new WebChromeClient());
    myFacebookWebView.loadUrl("https://www.google.com/");


    return view;


  }

}

My Activity:

public class SocialActivity extends AppCompatActivity {


private TabLayout mTabLayout;
private ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_social);


    mViewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(mViewPager);

    mTabLayout = (TabLayout) findViewById(R.id.tab_layout);
    mTabLayout.setupWithViewPager(mViewPager);
    mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));


}


private void setupViewPager(ViewPager viewPager) {


    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new FragmentOne(), "ONE");
    adapter.addFragment(new FragmentTwo(), "TWO");
    adapter.addFragment(new FragmentThree(), "THREE");
    adapter.addFragment(new FragmentFour(), "FOUR");
    viewPager.setAdapter(adapter);

}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment,String title) {
        mFragmentList.add(fragment);


    }

    @Override
    public CharSequence getPageTitle(int position) {



        return null;

      }
  }

}

Upvotes: 0

Views: 713

Answers (3)

Sai&#39;s Stack
Sai&#39;s Stack

Reputation: 1385

You can show and hide progress dialog like this

  public class FragmentOne extends Fragment {


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

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

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

        final ProgressDialog progressBar = new ProgressDialog(getActivity());
        progressBar.setMessage("Getting Faqs details...Please wait....");
        progressBar.show();
        progressBar.setCancellable(false);

    //Using the "View" to obtain the WebView
    View view = inflater.inflate(R.layout.fragment_one, container, false);

    //in app WebView
    WebView myFacebookWebView = (WebView) view.findViewById(R.id.webview_facebook);
    WebSettings webSettings = myFacebookWebView.getSettings();
    webSettings.setJavaScriptEnabled(true); 


 webview.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

    public void onPageFinished(WebView view, String url) {
        dismissProgressDialog();
    }

    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
         dismissProgressDialog();
        Toast.makeText(getActivity(), "Oh no! " + description, Toast.LENGTH_SHORT).show();
    }
});

myFacebookWebView.loadUrl("https://www.google.com/");


    return view;


  }

private void dismissProgressDialog(){
if (progressBar.isShowing()) {
                progressBar.dismiss();
            }

    }

Upvotes: 0

M. C
M. C

Reputation: 28

You can override WebViewClient's onPageFinished(WebView view, String url) method.

WebView myFacebookWebView = (WebView)     view.findViewById(R.id.webview_facebook);
WebSettings webSettings = myFacebookWebView.getSettings();
webSettings.setJavaScriptEnabled(true);      
myFacebookWebView.setWebChromeClient(new WebChromeClient());

// START PROGRESS DIALOG HERE
myFacebookWebView.loadUrl("https://www.google.com/");

myFacebookWebView.setWebViewClient(new WebViewClient()
   {
       public void onPageFinished(WebView view, String url)
       {
          // DISMISS PROGRESS DIALOG HERE
       }
   }
);

Upvotes: 1

thantieuhodo
thantieuhodo

Reputation: 54

you can close process dialog on event onPageFinished (when success) or onReceivedError (when error) of class MyWebViewClient

webView.setWebViewClient(new MyWebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);

        // close your process dialog:
    }

    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);

        // close your process dialog:
    }
});

if time loading of webview is too long (but still success), you should check time out to close.

Upvotes: 1

Related Questions