2011-07-27 10 views
11

私はあなたがアイテムがWebViewの中にクリックされたときに処理するためにwebviewクライアントを設定するには?

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

を使用するアンドロイドのドキュメントで見られます。

私の唯一の問題は、別の方法でURLを設定していることです。

HelloWebViewClientはそれをオーバーライドし、ユーザーが選択できるURLは使用しません。それはちょうどnullを返します..どのように私はユーザーが設定した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がロードされます。そこから私はURLにそれを設定しました。

答えて

13

は、あなただけの代わりに、パラメータからURLのメンバ変数から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

あなたのWebViewのためのカスタムWebViewClientを設定し、WebViewの中にURLをロードしますが、私たちは前にやっているようになります。

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

商品がクリックされるたびに、(yourUrl) –

+0

あなたのコメントからの動作を理解できません。より多くのコードを書いて、あなたが達成しようとしているものにもっと具体的にしてください。 –

+0

私の編集を見てください –

2

これに該当するかどうか、あなたの質問から明らかではないが、 WebViewのWebViewClientをコードで作成したカスタムサブクラスに設定していない可能性があります。どこかのコードで、あなたのようなものが必要です:その後、私はもっとエレガントな方法は、これを達成するためにことを示唆している、シンプルなだけWebViewClientにWebViewのとあなたの変更のこの1つのインスタンスでこれをやっている場合

browser.setWebViewClient(new HelloWebViewClient()); 

をしています次のようになります。

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

編集:

それはWebViewClientが実際に赤いニシンであることは可能ですか? getUserPreference()にswitch文に問題があるように見えます。最初のswitch文は不要ですが、2番目のswitch文はすべてのケースが同じであるため、gamestopにURLを設定します。これはあなたが過負荷にしましたWebviewClientを伝え

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

:ユーザーが同じ活動からURLを選択した場合

+0

ユーザーはURLを選択する選択肢があります。問題は文字列URLのURLです.WebViewに読み込むURLを受け入れることはありません。 –

+0

編集を見てください。ユーザーがRadioGroupからURLを選択しました –

+0

私は自分のレスポンスを編集して欠落しているものを表示しましたが、それは編集キューにありますので、ここで説明しようとします:shouldOverrideUrlLoading()には次の行があります:view.loadUrl url); //これはメンバ変数url を返します。 – Jason

関連する問題