¿Cómo configurar el cliente webview?

He visto en la documentación de Android donde usas

private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { 

Manejar cuándo se hace clic en los elementos dentro de una vista web.

El único problema es conmigo, es que im el establecimiento de la url en otro método.

El HelloWebViewClient anula eso y no utiliza la url que el usuario puede elegir. Simplemente devuelve null .. ¿Cómo podría sobre paseo este método para utilizar el url establecido por el usuario?

La URL se carga cuando la uso en un método regular con el WebView browser; Y luego browser.loadUrl(String url)

 @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.shopping); findIT = (Button)findViewById(R.id.findIT); edittext = (EditText)findViewById(R.id.item); type = (RadioGroup)findViewById(R.id.console); site = (RadioGroup)findViewById(R.id.shopping_group); findIT.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { item = edittext.getText().toString(); lookUp(); } }); } public void lookUp(){ browser = (WebView) findViewById(R.id.shoppingBrowser); browser.getSettings().setJavaScriptEnabled(true); Log.v(item, item); getUserPreference(); browser.setWebViewClient(new HelloWebViewClient()); browser.loadUrl(url); } private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String notuse) { Log.v("shopping", url+" loaded"); return true; } } public void getUserPreference(){ switch(type.getCheckedRadioButtonId()){ case R.id.item: console = "item"; break; case R.id.PS3: console = "item"; break; case R.id.item: console = "item"; break; }Log.v("item", console); switch(site.getCheckedRadioButtonId()){ case R.id.store: url = "http://www.gamestop.com/browse?nav=16k- "+ item +" " + console; break; case R.id.store: url = "http://www.google.com/search?q="+item + " " + console+"&tbm=shop&hl=en&aq=0&oq=where+"; break; case R.id.store: url = "http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Dvideogames&field-keywords="+item + " "+ console+"&x=0&y=0"; Log.v("shopping", url); } } } 

Si ves lo que estoy tratando de hacer, el usuario puede seleccionar el sitio en el que desea comprar. Y de allí lo fijé a la url.

Si el usuario está eligiendo la URL de la misma actividad, sólo puede hacer referencia a la URL de la variable miembro en lugar de la URL del parámetro:

 // Member variable stored to reflect user's choice private String mUserUrl = "http://stackoverflow.com"; private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // This line right here is what you're missing. // Use the url provided in the method. It will match the member URL! view.loadUrl(url); return true; } } 

Esto le dice a WebviewClient que ha sobrecargado la carga de URL (y de hecho le ha hecho cargar la URL que desea en lugar de la url suministrada).

Aquí hay un ejemplo completo de algo que me burlé:

 public class HelloWebViewActivity extends Activity { private WebView mWebView = null; private EditText mInputUrl = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mInputUrl = (EditText)findViewById(R.id.input_url); Button button = (Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String url = mInputUrl.getText().toString(); mWebView.loadUrl(url); } }); mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.setWebViewClient(new HelloWebViewClient()); } private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } } 

Espero que esto ayude. Si esto funciona para usted, marque la respuesta como aceptada.

No está claro de su pregunta si este es el caso, pero es posible que no haya establecido el WebViewClient de su WebView en la subclase personalizada que creó en su código. En algún lugar de tu código deberías tener algo como:

 browser.setWebViewClient(new HelloWebViewClient()); 

Si sólo está haciendo esto con esta única instancia de WebView y sus modificaciones al WebViewClient son simples, entonces sugeriría que una forma más elegante de lograr esto sería la siguiente:

 browser.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // Insert your code here } }); 

Editar:

¿Es posible que el WebViewClient sea realmente un arenque rojo? Me parece que hay un problema con las sentencias switch en getUserPreference (). Mientras que la primera instrucción switch parece innecesario, el segundo sólo establece la url a gamestop porque todos los casos son los mismos.

Configurarás tu WebViewClient personalizado para tu webview y cargarás la url en la webview como lo estás haciendo antes:

 mWebView.setWebViewClient(new HellowWebViewClient()); mWebView.loadUrl(yourUrl); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.