2011-07-27 109 views
11

我Android文檔中所看到的,你用如何設置webview客戶端?

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

爲了處理項目時,被點擊網頁視圖中。

唯一的問題是與我,是即時通訊設置另一種方法的網址。

HelloWebViewClient覆蓋並且不使用用戶可以從中選擇的url。它只是返回null ..我可以如何騎這個方法來使用用戶設置的網址?

當我與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); 
      } 
     } 
    } 

如果你看到什麼即時試圖做的用戶開始選擇他們想要從開店哪個網站。並從那裏我設置爲網址。

回答

13

如果用戶從同一活動選擇的網址,你可以剛從成員變量,而不是從參數中的URL引用網址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; 
    } 
} 
} 

希望這有助於。如果這適用於您,請將答案標記爲已接受。

+0

它並不是我即將做的事情。看看我上面的編輯。 –

0

您將設置自定義WebViewClient爲您的WebView和web視圖加載網址爲你,我們正在做前:

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

每次點擊一個項目都會引用(yourUrl) –

+0

我無法理解您評論中的行爲。把更多的代碼放在你想要實現的東西上,並且更具體。 –

+0

看看我的編輯 –

2

它不是從你的問題,這是否是清晰的情況下,但您可能沒有將WebView的WebViewClient設置爲您在代碼中創建的自定義子類。某處在你的代碼,你應該有這樣的:

browser.setWebViewClient(new HelloWebViewClient()); 

如果你只用WebView中的這一個實例這樣做的,你修改的WebViewClient是簡單的,那麼我會建議一個更優雅的方式來做到這一點將以下內容:

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

編輯:

是否有可能在WebViewClient實際上是一個紅鯡魚?在我看來,getUserPreference()中的switch語句存在問題。雖然第一個switch語句看起來沒有必要,但第二個只將url設置爲gamestop,因爲所有的情況都是一樣的。

// 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:

+0

用戶可以選擇在網址之間進行選擇。問題是字符串URL中的url不會接受url即時通訊嘗試給它加載到webview –

+0

看看編輯。用戶從RadioGroup中選擇URL –

+0

我剛剛編輯了我的響應以顯示缺少的內容,但它在編輯隊列中,因此我也會在這裏解釋一下:在shouldOverrideUrlLoading()中,您應該有以下幾行:view.loadUrl( URL); //這是成員變量url return true; – Jason