2011-09-25 2 views
0

나는 질문이 생기고 thta가 계속 발생하고 그것을 고치는 방법을 궁금해하고 있습니다. 보기와 상호 작용할 수 있기를 원합니다.이 경우에는 oncreate 외부에서 웹보기를 사용하여 내 메서드가 oncreate에 정의 된 webview와 상호 작용할 수 있도록합니다.안드로이드에서 OnCreate 메소드 외부에서 webview와 상호 작용

다음은 내가 수행하려고 시도하는 예입니다. 검색 음성 배열에서 사용자가 "go"라고 말했는지 확인하기 위해 검사하고, 내가했으면 go 버튼을 누르거나 단순히 go 버튼이 수행 할 코드를 실행하기를 원합니다. 나는 이것에 대해 충분히 설명해 주었으면 좋겠어. 명확한 설명이 필요하면 사전에 알려 줘.

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.speech.RecognizerIntent; 
import android.util.Log; 
import android.view.View; 
import android.view.inputmethod.InputMethodManager; 
import android.webkit.WebView; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class web extends Activity { 
    static final int check = 111; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.web); 
     final WebView webBrowser = (WebView) findViewById(R.id.webview); 
     webBrowser.setWebViewClient(new cpViewClient()); 
     webBrowser.getSettings().setJavaScriptEnabled(true); 
     webBrowser.getSettings().setLoadWithOverviewMode(true); 
     webBrowser.getSettings().setUseWideViewPort(true); 
     webBrowser.loadUrl("http://www.google.com"); 
     final InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 

     Button bGo = (Button) findViewById(R.id.go); 
     Button bBack = (Button) findViewById(R.id.back); 
     Button bForward = (Button) findViewById(R.id.forward); 
     Button bRefresh = (Button) findViewById(R.id.refresh); 
     Button bClearHistory = (Button) findViewById(R.id.clearhistory); 
     final EditText etUrl = (EditText) findViewById(R.id.url); 

     bGo.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String enteredUrl = etUrl.getText().toString(); 
       enteredUrl = enteredUrl.toLowerCase(); 
       int len = enteredUrl.length(); 
       /* 
       * if (enteredUrl.substring(0, 3).equals("www")) enteredUrl = 
       * "http://" + enteredUrl; else if (enteredUrl.substring(0, 
       * 11).equals("http://www.")) //Do nothing its perfect 
       * Log.d("URL", "The Url is fine"); else enteredUrl = 
       * "http://www." + enteredUrl; 
       * 
       * String dot1 = enteredUrl.substring(len-5, len-4); String dot2 
       * = enteredUrl.substring(len-4, len-3); if (!dot1.equals(".") 
       * || !dot2.equals(".")) enteredUrl = enteredUrl + ".com"; 
       */ 
       if (enteredUrl.indexOf("http://") == -1 
         & enteredUrl.indexOf("www.") == -1) { 
        enteredUrl = "http://www." + enteredUrl; 
       } else if (enteredUrl.indexOf("http://") == -1) { 
        enteredUrl = "http://" + enteredUrl; 
       } 

       if (enteredUrl.indexOf(".com") == -1 
         & enteredUrl.indexOf(".org") == -1 
         & enteredUrl.indexOf(".net") == -1 
         & enteredUrl.indexOf(".mil") == -1 
         & enteredUrl.indexOf(".gov") == -1 
         & enteredUrl.indexOf(".edu") == -1 
         & enteredUrl.indexOf(".info") == -1) { 
        enteredUrl = enteredUrl + ".com"; 
       } 

       webBrowser.loadUrl(enteredUrl); 
       etUrl.setText(enteredUrl); 
       imm.hideSoftInputFromWindow(etUrl.getWindowToken(), 0); 
      } 

     }); 
     bBack.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (webBrowser.canGoBack()) 
        webBrowser.goBack(); 
      } 

     }); 
     bForward.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (webBrowser.canGoForward()) 
        webBrowser.goForward(); 
      } 

     }); 
     bRefresh.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       webBrowser.reload(); 
      } 

     }); 
     bClearHistory.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       webBrowser.clearHistory(); 
      } 

     }); 
     Button VR = (Button) findViewById(R.id.webvoice); 
     VR.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       getvoice(); 
      } 

     }); 



    } 
    public void getvoice() { 
     Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
       RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     startActivityForResult(i, check); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     if (requestCode == check && resultCode == RESULT_OK) { 
      result = data 
        .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
      final TextView tvvoicearray = (TextView) findViewById(R.id.tvvoicearray); 
      tvvoicearray.setText(result.get(0)); 
      searchvoicearray(); 
     } 

     super.onActivityResult(requestCode, resultCode, data); 
    } 

    public void searchvoicearray() { 
     // Log.d("DEBUGGINGG",result.get(0)); 
     // System.out.println(result); 
     int size = result.size(); 
     int i = 0; 
     while (i < size) { 
      String s = result.get(i); 
      // next line removes all spaces in the string 
      // s= s.replaceAll(" ", ""); 
      if (s.indexOf("go") != -1) { 
       i = size; 
       //i want the button go to be pressed or its action to be completed. 

       if (webBrowser.canGoBack()) 
       webBrowser.goBack(); 
      } 

      else if (s.indexOf("back") != -1) { 
       i = size; 
       if (webBrowser.canGoBack()) 
        webBrowser.goBack(); 
      } 

      else { 
       System.out.println(result.get(i) + " is not internet"); 
       Log.d("DEBUGGINGG", result.get(i) + " is not internet"); 
       // } 
       i++; 
      } 
     } 

    } 

    ArrayList<String> result = new ArrayList<String>(); 

} 

답변

1

그런 다음, onCreate 외부 웹보기를 선언

static final int check = 111; 
private WebView webBrowser; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.web); 
    webBrowser = (WebView) findViewById(R.id.webview); 
1

당신은에서 onCreate() 메소드 로컬 사용자 클래스가 아닌 변수의 멤버 웹보기를 할 필요가 :하려면 단순히 메소드 밖에서 선언을 이동하면됩니다.

public class web extends Activity { 

    //Declare your member objects/variables here 
    static final int check = 111; 
    WebView webBrowser; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.web); 
     webBrowser = (WebView) findViewById(R.id.webview); 
     ... 
     } 
...   
}