2013-07-02 35 views
0

我的應用程序頂部有一個WebView。爲了展示東西,我使用了吐司。但是如果WebView出現,Toast框從未顯示,而在WebView顯示之前,Toast是可見的。我想知道Toast是否可能被WebView覆蓋。有沒有人有同樣的問題?1)setOnClickListener和onclick之間的區別2)如何只重新加載webview不重新加載其他人在同一個線性佈局

謝謝。

編輯!!!嗨,謝謝你的所有輸入。我發現我爲我的問題發佈了一個錯誤的問題。我發現真正的問題如下。在代碼中,我使用setOnClickListener爲該按鈕註冊一個回調。在調試中,我發現回調沒有被調用,所以Toast語句沒有被調用,並且它不被webview覆蓋。

然後,我嘗試了xml佈局中的onclick屬性來定義按鈕的回調clickGo。當我按下按鈕時,這個工作正常,Toast顯示。

現在,我的問題是setOnClickListener和onlick之間的區別。

還有一個問題,在我的clickGo中,我刷新了webview。當點擊按鈕時,webview確實會重新加載。但與此同時,微調器也重新加載,並且選擇位置被重置爲第0。我怎樣才能防止這一點?

再次感謝您!

public class MainActivity extends Activity { 

     JSONArray jArray; 
     String result = null; 
     InputStream is = null; 
     StringBuilder sb=null; 
     private Spinner spinner; 
     private Button btnSubmit; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     addListenerOnButton(); 
     addListenerOnSpinnerItemSelection(); 
     new DownloadTask().execute("www.google.com"); 
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
     } 

     // Given a string representation of a URL, sets up a connection and gets 
     // an input stream. 
     private String downloadUrl(String urlString) throws IOException { 
     HttpClient httpClient = new DefaultHttpClient(); 
     HttpGet get = new HttpGet(urlString); 

     HttpResponse response = httpClient.execute(get); 

     // Build up result 
     return EntityUtils.toString(response.getEntity()); 
     } 

     public void addListenerOnSpinnerItemSelection() { 
     spinner = (Spinner) findViewById(R.id.spinner); 
     spinner.setOnItemSelectedListener(new CustomOnItemSelectedListener()); 
     } 

     public void clickGo(View v) { 
     Toast toast = Toast.makeText(MainActivity.this, 
      "OnClickListener : " + 
       "\nSpinner 1 : "+ String.valueOf(spinner.getSelectedItem()), 
        Toast.LENGTH_SHORT); 
     toast.setGravity(Gravity.TOP, 0, 0); 
     toast.show(); 
     new DownloadTask().execute("www.google.com"); 
     } 

     // get the selected dropdown list value 
     public void addListenerOnButton() { 

     spinner = (Spinner) findViewById(R.id.spinner); 
     btnSubmit = (Button) findViewById(R.id.button); 

     btnSubmit.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

      Toast toast = Toast.makeText(MainActivity.this, 
      "OnClickListener : " + 
       "\nSpinner 1 : "+ String.valueOf(spinner.getSelectedItem()), 
        Toast.LENGTH_SHORT); 
      toast.setGravity(Gravity.TOP, 0, 0); 
      toast.show(); 
      new DownloadTask().execute("www.google.com"); 

     } 

     }); 
    } 
` 
    // Implementation of AsyncTask used to download XML feed from stackoverflow.com. 
    private class DownloadTask extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... urls) { 
     return downloadUrl(urls[0]); 
     } 

     @Override 
     protected void onPostExecute(String result) { 
     setContentView(R.layout.activity_main); 
     // Displays the HTML string in the UI via a WebView 
     WebView myWebView = (WebView) findViewById(R.id.webview); 
     WebSettings webSettings = myWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     myWebView.loadUrl(result); 
     } 
    } 
    } 



    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="vertical" > 
    <LinearLayout android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" > 
      <TextView android:id="@+id/text" 
        android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
        android:text="@string/word" /> 
      <Button android:id="@+id/button" 
       android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Go" 
        android:onClick="clickGo" /> 
    </LinearLayout> 
    <Spinner android:id="@+id/spinner" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:entries="@array/dictionaries" 
      android:prompt="@string/dict_prompt" />  

    <WebView android:id="@+id/webview" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" /> 
    </LinearLayout> 
+0

可以請你顯示你的'webView'代碼? –

+0

這將是我第一次聽到烤麪包被覆蓋的場合。粘貼Toast的代碼。 – g00dy

+0

我改變了我的問題並上傳了我的代碼。 –

回答

0

我覺得這個問題可以解決你的問題。

如果這是可以顯示的,那麼我認爲敬酒不應該被WebView覆蓋。

onPageFinished() never called (webview)!

mWebView.setWebViewClient(new WebViewClient() { 
@Override 
public void onPageFinished(WebView view, String url) { 
    super.onPageFinished(mWebView, url); 
    Toast.makeText(getApplicationContext(), "Done!", Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
    Toast.makeText(getApplicationContext(), "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
} 

}); mWebView.loadUrl(「http://pabebbe.com/m/register」);

+0

感謝您的意見。我改變了我的問題並上傳了我的代碼。 –

0

沒有烤麪包以最大繪製順序繪製,因爲它們是在運行期間創建的。請確定您在哪裏創建烤麪包,以及它是否真的被調用。
編輯
如果你的問題是關於繪製順序嘗試使用此代碼

private void moveViewToFront(View currentView) 
    { 
     ViewGroup vg = ((ViewGroup) currentView.getParent()); 
     vg.bringChildToFront(vg.getChildAt(vg.indexOfChild(currentView))); 
    } 

moveViewToFront((LinearLayout) findViewById(R.id.main_layout_2_linear));//pass your ui element you want to bring to the top 
+0

謝謝您的輸入。我改變了我的問題並上傳了我的代碼。 –

0

爲此,我們需要在Android中添加webviewclient因爲我們在XML中添加的WebView。 然後我們必須註冊webviewclient與我們使用這種方法創建的WebView。

myWebView.setWebViewClient(new MyWebViewClient()); 

現在,創建一個新項目並將其命名爲WebViewDemo。 main.xml中,

<?xml version="1.0" encoding="utf-8"?> 
<WebView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/webview" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
/> 

現在創建一個名爲test.html的資產文件夾內的文件,該代碼複製到它。這是我們加載到webview中的html文件。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" 
    "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"> 
<html> 
<body> 
<a href="http://www.google.com">Google</a> 
<input type="button" value="Click Me" onClick="showAndroidToast('Hello Google!')"  
/> 
<script type="text/javascript"> 
    function showAndroidToast(toast) { 
     Android.showToast(toast); 
    } 

</script> 
</body> 
</html> 
在Java代碼中

現在參考的網頁流量,現在我們必須添加JavaScript接口,通過調用這個函數

WebSettings webSettings = myWebView.getSettings(); 
webSettings.setJavaScriptEnabled(true); 

加載HTML文件

WebView myWebView; 
myWebView = (WebView) findViewById(R.id.webview); 
myWebView.loadUrl("file:///android_asset/test.html"); 

現在啓用的javascript用於收聽我們在webview html文件中定義的javascript函數。

myWebView.addJavascriptInterface(new JavaScriptInterface(this), "Android"); 

// outside oncreate 
public class JavaScriptInterface { 
    Context mContext; 

    /** Instantiate the interface and set the context */ 
    JavaScriptInterface(Context c) { 
     mContext = c; 
    } 

    /** Show a toast from the web page */ 
    public void showToast(String toast) { 
     Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
     startActivity(new Intent(WebViewDemo.this, WebViewDemo.class)); 
    } 
} 

現在創建一個webview客戶端,用於監聽瀏覽器活動並執行特定功能。

myWebView.setWebViewClient(new MyWebViewClient()); 

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (Uri.parse(url).getHost().equals("www.coderzheaven.com")) { 
      Toast.makeText(getApplicationContext(), "www.coderzheaven.com",  
Toast.LENGTH_SHORT).show(); 
      return false; 
     } 
     // Otherwise, the link is not for a page on my site, so launch another Activity      
that handles URLs 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(intent); 
     return true; 
    } 
} 

現在我們來聽聽後退按鈕。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // Check if the key event was the BACK key and if there's history 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { 
     myWebView.goBack(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
    } 

現在項目結束了。現在運行並查看結果。 這裏是這個例子的完整的java代碼

package com.coderzheaven.pack; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Toast; 

public class WebViewDemo extends Activity { 

WebView myWebView; 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    myWebView = (WebView) findViewById(R.id.webview); 
    myWebView.loadUrl("file:///android_asset/test.html"); 
    WebSettings webSettings = myWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 

    myWebView.addJavascriptInterface(new JavaScriptInterface(this), "Android"); 

    // myWebView.setWebViewClient(new WebViewClient()); 
    myWebView.setWebViewClient(new MyWebViewClient()); 
    } 

    public class JavaScriptInterface { 
    Context mContext; 

    /** Instantiate the interface and set the context */ 
    JavaScriptInterface(Context c) { 
     mContext = c; 
    } 

    /** Show a toast from the web page */ 
    public void showToast(String toast) { 
     Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
     startActivity(new Intent(WebViewDemo.this, WebViewDemo.class)); 
    } 
    } 

    private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (Uri.parse(url).getHost().equals("www.google.com")) { 
      // This is my web site, so do not override; let my WebView load the page 
      Toast.makeText(getApplicationContext(), "www.google.com",  
    Toast.LENGTH_SHORT).show(); 
      return false; 
     } 
     // Otherwise, the link is not for a page on my site, so launch another Activity 
    that handles URLs 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(intent); 
     return true; 
    } 
    } 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // Check if the key event was the BACK key and if there's history 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { 
     myWebView.goBack(); 
     return true; 
    } 
    // If it wasn't the BACK key or there's no web page history, bubble up to the 
    default 
    // system behavior (probably exit the activity) 
    return super.onKeyDown(keyCode, event); 
    } 
} 
+1

感謝您的意見。我改變了我的問題並上傳了我的代碼。 –