Search code examples
androidurlwebviewonclick

How to change the website in webview with a button in Android


I have a webview that by default loads a YouTube page. Then I have a editview and a button. I want to key in another website (for example, http://www.google.com) in the editview and when I click the button, the webview will change to the website.

But it will refresh and keep it on YouTube. I tried to change the setDesktopMode() in the onClick(), and it worked. How can I fix it?

Here is my Java code.

public class MainActivity extends AppCompatActivity {

    String Url;
    //Main code
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Perform web view
        final WebView webview = (WebView) findViewById(R.id.webview);
        Url = "http://www.youtube.com";
        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);
        //setContentView(webview);
        webview.setWebViewClient(new WebViewClient());
        webview.loadUrl(Url);
        setDesktopMode(webview, true);

        final EditText text1 = (EditText) findViewById(R.id.text1);
        Button ok = (Button)findViewById(R.id.ok);
        ok.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View view) {
                Url = text1.getText().toString();
                webview.clearCache(true);
                webview.loadUrl(Url);
                //webview.reload();
                setDesktopMode(webview, true);
                //return;

            }
        });
    }

    public void setDesktopMode(WebView webView, boolean enabled){
        String newUserAgent = webView.getSettings().getUserAgentString();
        if(enabled){
            try{
                String ua = webView.getSettings().getUserAgentString();
                String androidOSString = webView.getSettings().getUserAgentString().substring(ua.indexOf("("), ua.indexOf(")") + 1);
                newUserAgent = webView.getSettings().getUserAgentString().replace(androidOSString, "(X11; Linux x86_64)");
            } catch (Exception e){
                e.printStackTrace();
            }
        } else {
            newUserAgent = null;
        }

        webView.getSettings().setUserAgentString(newUserAgent);
        webView.getSettings().setUseWideViewPort(enabled);
        webView.getSettings().setLoadWithOverviewMode(enabled);
        webView.reload();
    }

}

Solution

  • Some changes to the above code:

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                EditText ed = findViewById(R.id.editText);
                webView.loadUrl(null);
                webView.clearCache(true);
                setDesktopMode(webView, true);
                webView.loadUrl(ed.getText().toString());
                //webview.reload();
    
            }
        });
    

    In the set desktop method, remove the reload line.

    public void setDesktopMode(WebView webView, boolean enabled){
        String newUserAgent = webView.getSettings().getUserAgentString();
        if(enabled){
            try{
                String ua = webView.getSettings().getUserAgentString();
                String androidOSString = webView.getSettings().getUserAgentString().substring(ua.indexOf("("), ua.indexOf(")") + 1);
                newUserAgent = webView.getSettings().getUserAgentString().replace(androidOSString, "(X11; Linux x86_64)");
            } catch (Exception e){
                e.printStackTrace();
            }
        } else {
            newUserAgent = null;
        }
    
        webView.getSettings().setUserAgentString(newUserAgent);
        webView.getSettings().setUseWideViewPort(enabled);
        webView.getSettings().setLoadWithOverviewMode(enabled);
       // webView.reload();
    }
    

    It work perfectly now.