Как установить клиент webview?

Я видел в документации по Android, где вы используете

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

Чтобы обрабатывать, когда элементы просматриваются в веб-просмотре.

Единственная проблема со мной - это то, что я устанавливаю URL в другом методе.

HelloWebViewClient переопределяет это и не использует URL-адрес, который пользователь может выбрать. Он просто возвращает null. Как я могу пережить этот метод, чтобы использовать url, заданный пользователем?

URL-адрес загружается, когда я использую его в обычном методе с WebView browser;, а затем 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);
          }
       }
  }

Если вы видите, что я пытаюсь сделать, пользователь выбирает, на каком сайте они хотят делать покупки. и оттуда я установил его в URL.

Ответ 1

Если пользователь выбирает URL-адрес из той же самой активности, вы можете просто ссылаться на URL-адрес из переменной-члена вместо URL-адреса из параметра:

// Member variable stored to reflect user 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;
    }
}

Это сообщает WebviewClient, что вы перегрузили загрузку URL-адреса (и фактически заставили его загрузить URL-адрес, который вы хотите, вместо поставляемого URL-адреса).

Вот полный пример того, что я издевался:

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

Надеюсь, это поможет. Если это работает для вас, отметьте ответ как принятый.

Ответ 2

Из вашего вопроса неясно, действительно ли это так, но возможно, что вы не установили WebViewClient вашего WebView в собственный подкласс, который вы создали в своем коде. Где-то в вашем коде вы должны иметь что-то вроде:

browser.setWebViewClient(new HelloWebViewClient());

Если вы делаете это только с помощью одного экземпляра WebView, и ваши изменения в WebViewClient просты, я бы предположил, что более элегантный способ добиться этого будет следующим:

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

Edit:

Возможно ли, что WebViewClient на самом деле является красной селедкой? Мне кажется, что есть проблема с операторами switch в getUserPreference(). В то время как первое предложение switch кажется ненужным, второе только устанавливает URL-адрес для игры, потому что все ваши случаи одинаковы.

Ответ 3

Вы установите свой собственный WebViewClient для своего веб-браузера и загрузите URL-адрес в веб-виде, как вы это делаете раньше:

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