Question

I'm developing an application in which I'm using webview to load certain websites. I also have customized actionbar on which I have website navigation button. Here is the view how my layout is looking like:

How it looks to me.

When I load website my all three buttons are visible, but I want them to be visible at that time only when user has clicked on some URL, so user easily understand the purpose of those buttons.

I have added all the functionalities to those button. Here is my code:

website_back = (ImageButton) cView.findViewById(R.id.website_back);
website_forward = (ImageButton) cView.findViewById(R.id.website_forward);
website_refresh = (ImageButton) cView.findViewById(R.id.website_refresh);

if (v.getId() == R.id.website_back) {
    webview.goBack();
}
if (v.getId() == R.id.website_forward) {
    webview.goForward();
}
if (v.getId() == R.id.website_refresh) {
    webview.reload();
}

My WebViewClient:

private class HelloWebViewClient extends WebViewClient {

    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        progress.setVisibility(View.VISIBLE);
        super.onPageStarted(view, url, favicon);
    }

    public void onPageFinished(WebView view, String url) {
        progress.setVisibility(View.GONE);
        super.onPageFinished(view, url);
    }

    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        website_back.setImageResource(R.drawable.webview_back);
        view.loadUrl(url);
        return true;
    }
}

How can I only show those buttons when user has clicked on some URL, on the website launched in the webview?

Any kind of help will be appreciated.

Was it helpful?

Solution

You need to attach a WebViewClient to the WebView to listen in on the URLs that are being fetched.

mWebView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(url.equals(mOriginalUrl)){
            //initial url load, ignoring.
        }
        else {
            //url was navigated to - do something
        }

        return super.shouldOverrideUrlLoading(view, url);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        //page has finished loading
    }
});

OTHER TIPS

this worked for me. hope it would be useful for you. try this

ExternalSiteActivity.class

public class ExternalSiteActivity extends Activity{
WebView webView;
String productURL;
ProgressBar progressBar;
ImageButton webBackButton;
ImageButton webForwButton;
ImageButton webRefreshButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.external_site_activity);
    productURL= (String) getIntent().getStringExtra("productUrl");
    System.out.println(productURL+"**********");
    progressBar=(ProgressBar)findViewById(R.id.progress);
    progressBar.setVisibility(View.INVISIBLE);
    webView = (WebView) findViewById(R.id.webview);
    webBackButton=(ImageButton)findViewById(R.id.web_back_button);
    webForwButton=(ImageButton)findViewById(R.id.web_forw_button);
    webRefreshButton=(ImageButton)findViewById(R.id.web_refresh_button);
    webView.setWebViewClient(new MyWebViewClient());
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl(productURL);
    webBackButton.setOnClickListener( new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            if(webView.canGoBack())
                webView.goBack();
        }
    });
    webForwButton.setOnClickListener( new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            if(webView.canGoForward())
                webView.goForward();
        }
    });
    webRefreshButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            webView.reload();
        }
    });
}

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        Log.v("shouldOverrideUrlLoading", "shouldOverrideUrlLoading");
        return true;
    }

    @Override
    public void onFormResubmission(WebView view, Message dontResend,
            Message resend) {
        Log.v("onFormResubmission", "onFormResubmission");
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        if(webView.canGoBack())
        {
            webBackButton.setEnabled(true);
        }
        else
        {
            webBackButton.setEnabled(false);
        }
        if(webView.canGoForward())
        {
            webForwButton.setEnabled(true);
        }
        else
        {
            webForwButton.setEnabled(false);
        }
        progressBar.setVisibility(View.VISIBLE);
        Log.v("onPageStarted", "onPageStarted");
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        progressBar.setVisibility(View.INVISIBLE);
    }

    @Override
    public void onLoadResource(WebView view, String url) {
        Log.v("on load ","load resources----");
    }

    // To handle "Back" key press event for WebView to go back to previous screen.
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
        webView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

}

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top