2011-07-27 17 views
11

he visto en la documentación de Android en el que utiliza¿Cómo configurar el cliente de vista web?

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

de manejar cuando se hace clic en los elementos dentro de una vista web.

El único problema es para mí, es que estoy configurando la URL en otro método.

HelloWebViewClient lo reemplaza y no usa la url que el usuario puede elegir. Simplemente devuelve null ... ¿Cómo podría usar este URL para usar la URL establecida por el usuario?

La URL se carga cuando lo 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 se entiende lo que estoy tratando de hacer el usuario obtiene para seleccionar qué sitio que quieren hacer compras de. y desde allí lo configuro en la url.

Respuesta

13

Si el usuario es la elección de la dirección URL de la misma actividad que se acaba de 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 al WebviewClient que ha sobrecargado el Carga de URL (y de hecho causó que cargue la URL que desea en lugar de la url proporcionada).

Aquí es un ejemplo completo de algo que hasta burlado:

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.

+0

No es lo que realmente intento hacer. Mira mi edición anterior. –

0

usted configurar su costumbre WebViewClient para su vista web y cargar la URL en la vista web a medida que estamos haciendo antes:

mWebView.setWebViewClient(new HellowWebViewClient()); 
mWebView.loadUrl(yourUrl); 
+0

Cada vez que se hace clic en un elemento, se refiere al (yourUrl) –

+0

No puedo entender el comportamiento de su comentario. Pon más código y sé más específico en lo que estás tratando de lograr, por favor. –

+0

Mira mi edición –

2

No es claro por su pregunta de si este es el caso, pero es posible que no haya configurado el WebViewClient de su WebView a la subclase personalizada que creó en su código. En algún lugar de su código que debe tener algo como:

browser.setWebViewClient(new HelloWebViewClient()); 

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

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

Editar:

¿es posible que el WebViewClient es en realidad una cortina de humo? Me parece que hay un problema con las instrucciones de cambio en getUserPreference(). Si bien la primera declaración de cambio parece innecesaria, la segunda solo establece el URL en Gamestop porque todos tus casos son iguales.

+0

El usuario tiene la opción de elegir entre las URL.El problema es que la URL en String URL no aceptará la URL que estoy tratando de darle para cargar en la vista web –

+0

Mira la edición. El usuario elige la URL del RadioGroup –

+0

Acabo de editar mi respuesta para mostrar lo que falta, pero está en la cola de edición, así que trataré de explicarlo aquí también: en shouldOverrideUrlLoading() debería tener las siguientes líneas: view.loadUrl (url); // Esta es la variable de miembro url return true; – Jason

Cuestiones relacionadas