Как настроить клиент веб-просмотра? - PullRequest
12 голосов
/ 27 июля 2011

Я видел в документации 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.

Ответы [ 3 ]

15 голосов
/ 27 июля 2011

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

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

Это сообщает 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;
    }
}
}

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

3 голосов
/ 27 июля 2011

Из вашего вопроса не ясно, так ли это, но возможно, что вы не установили 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 для gamestop, потому что все ваши случаи одинаковы.

0 голосов
/ 27 июля 2011

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

mWebView.setWebViewClient(new HellowWebViewClient());
mWebView.loadUrl(yourUrl);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...