How do I refresh the contents of a webview everytime the app is launched?

一世执手 提交于 2019-12-14 03:17:07

问题


I am trying to refresh the contents of my webview everytime someone launches my app.Say someone goes to a different page within the app or goes to background and then relaunches the app, i want the contents of my webview to refresh/reload based on the latest changes I have done on my server. Here's the code I have so far:

public class MainActivity extends Activity {
    WebView webview;
    ProgressBar progress; 
    public final static int MENU_FULLSCREEN_ON = 3;
    public final static int MENU_FULLSCREEN_OFF = 4;
    private boolean fullscreen = true;
    public static Object SPLASH_LOCK = new Object();
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
       // getWindow().requestFeature(Window.FEATURE_PROGRESS);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.main);
        progress = (ProgressBar) findViewById(R.id.ProgressBar);
        progress.setVisibility(View.VISIBLE);
         webview = (WebView)findViewById(R.id.webview);


         if(CheckNetwork.isInternetAvailable(MainActivity.this))
        {
        webview.setInitialScale(1);
        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);

        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setLoadWithOverviewMode(true);
        webview.getSettings().setUseWideViewPort(true);
      //  webview.setWebViewClient(new MyCustomWebViewClient());
        if (Build.VERSION.SDK_INT >= 11){
            webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }
        webview.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
        webview.setScrollbarFadingEnabled(false);
       webview.getSettings().setRenderPriority(RenderPriority.HIGH);
        webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
       // webview.getSettings().setBlockNetworkLoads(true);
        webview.getSettings().setBuiltInZoomControls(true); 
        webview.clearCache(true);
        webview.loadUrl("http://myserver.com/firstpage");
        webview.getSettings().setDomStorageEnabled(true);
        webview.getSettings().setDatabaseEnabled(true);
        webview.getSettings().setAppCacheEnabled(true);
        //http://www.inpixelitrust.fr/demos/restaurant_picker/
        //file:///android_asset/index.html
        webview.reload();
        webview.getSettings().setSupportZoom(false);
         }else{
              Toast toast = Toast.makeText(MainActivity.this, "No Internet Connection", Toast.LENGTH_LONG);
              toast.show(); 
              AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
              alertDialog.setTitle("Connection Problem");
              alertDialog.setMessage("You need to be connected to the internet to view this app");
              alertDialog.setButton("OK", new DialogInterface.OnClickListener() {

                  public void onClick(final DialogInterface dialog, final int which) {
                      return;
                  }
              });
              alertDialog.show();

        }
       /* webview.setWebChromeClient(new WebChromeClient()
        {
         public void onProgressChanged(WebView view, int progress)
         {
           // update the progressBar
           MainActivity.this.setProgress(progress * 100);
         }
        });*/
        if (!isTaskRoot()) {
            final Intent intent = getIntent();
            final String intentAction = intent.getAction();
            if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
                finish();
                return;
            }
        }

        setFullscreen();
    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(event.getAction() == KeyEvent.ACTION_DOWN){
            switch(keyCode)
            {
            case KeyEvent.KEYCODE_BACK:
                if(webview.canGoBack() == true){
                    webview.goBack();
                }else{
                    finish();
                }
                return true;
            }

        }
        return super.onKeyDown(keyCode, event);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
      super.onCreateOptionsMenu(menu);

      menu.add(0, MENU_FULLSCREEN_ON, 0, R.string.menu_fullscreen_on);
      menu.add(0, MENU_FULLSCREEN_OFF, 0, R.string.menu_fullscreen_off);


      return true;
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu)
    {
      super.onPrepareOptionsMenu(menu);

      menu.findItem(MENU_FULLSCREEN_ON).setVisible(!fullscreen);
      menu.findItem(MENU_FULLSCREEN_OFF).setVisible(fullscreen);

      return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
      switch (item.getItemId()) {

      case MENU_FULLSCREEN_ON:
        fullscreen = true;
        setFullscreen();
        return true;
      case MENU_FULLSCREEN_OFF:
        fullscreen = false;
        setFullscreen();
        return true;

      }
      return false;
    }
    private void setFullscreen()
    {
      if (fullscreen) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().clearFlags(
            WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
      } else {
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().addFlags(
            WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
      }

    }
/*
    @Override
    protected void onNewIntent(Intent intent) {

          setFullscreen();


    }*/


    private class MyCustomWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            //view.loadUrl(url);
            return true;
        }
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            progress.setVisibility(View.VISIBLE);
          }
          public void onPageFinished(WebView view, String url) {
            progress.setVisibility(View.GONE);
            synchronized (SPLASH_LOCK) {
                SPLASH_LOCK.notifyAll();
            }
          }
    }

}

回答1:


onResume() is called when the activity returns to the foreground. You can place your reload in there. Something like this:

@Override
protected void onResume(){
    super.onResume();
    webView.reload();
}



回答2:


You can do it like this, but make sure you check that the WebView is not null since onResume is called prior to onCreate and WebView may not exist in onResume yet!

@Override
protected void onResume() {
    super.onResume();
    if(webView != null){
        webView.loadUrl(...);
        or
        webView.reload();
    }
}



回答3:


You need to override the onResume(){} then just load the url again.



来源:https://stackoverflow.com/questions/29994509/how-do-i-refresh-the-contents-of-a-webview-everytime-the-app-is-launched

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!