Как установить клиент 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);