Domanda

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.

È stato utile?

Soluzione

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
    }
});

Altri suggerimenti

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);
}

}

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top