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