android - 如何设置webview客户端?

标签 android

我在你使用的android文档中看到

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

处理在 web View 中单击项目的时间。

唯一的问题是我用另一种方法设置了 url。

HelloWebViewClient 覆盖了它并且不使用用户可以从中选择的 url。它只是返回 null..我怎么能覆盖这个方法来使用用户设置的 url?

当我在 WebView browser; 中以常规方法使用它时加载 URL,然后加载 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。

最佳答案

如果用户从同一 Activity 中选择 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;
    }
}
}

希望这对您有所帮助。如果这对您有用,请将答案标记为已接受。

关于android - 如何设置webview客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6850017/

相关文章:

android(高级)使用 DrawText 保存位图 Canvas ,但需要计算文本大小

android - 不同的字体大小适用于不同的屏幕尺寸

android - Google 文档电子表格中缺少 "Create a legacy form"?

android - 在 Android 上发送 Post 请求和 HttpHeaders

android - 我们可以在 Android 中创建自定义 Synthetic Kotlin Extensions 吗?

java - 在更改 Intent 之前提示相机许可

android - Flutter 使用 setState() 方法从 native 方法调用更新 UI

android - 如何在我的 Android 应用程序中进行实时人体分割

android - Parse.com Anywall 教程根据与活跃用户的距离排序帖子

android - declare-styleable 有什么意义?