2013-05-06 52 views
1

我正在与内部的WebView的应用,局限在一个网站,我想有它有一个后退前进刷新停止等..如何正确地刷新/停止按钮android webview?

这里是我的代码:

package com.csu.stan.asiusu; 



import android.content.Intent; 
import android.graphics.Bitmap; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.NavUtils; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

import com.actionbarsherlock.app.SherlockActivity; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuInflater; 
import com.actionbarsherlock.view.MenuItem; 

public class Site extends SherlockActivity { 
private WebView myWebView; 
private MenuItem fwdmenu, bckmenu, refmenu; 
private boolean refresh = false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_site); 
    //webview 
    myWebView = (WebView) findViewById(R.id.webview); 
    myWebView.setWebViewClient(new mywebclient()); 
    myWebView.setBackgroundColor(0); 
    myWebView.setBackgroundResource(R.drawable.back); 
    myWebView.clearHistory(); 
    myWebView.clearCache(true); 
    myWebView.loadUrl("http://www.csustan.edu/asi-usu/new_index.php"); 
    //webview settings 
    WebSettings webSettings = myWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setUseWideViewPort(true); 
    webSettings.setDefaultZoom(WebSettings.ZoomDensity.FAR); 
    webSettings.setBuiltInZoomControls(true); 

    // Show the Up button in the action bar. 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
} 

//code called to update all icons 
    public void updateicons() { 
     if(myWebView.canGoBack()) { 
      bckmenu.setIcon(R.drawable.ic_menu_back); 
      bckmenu.setEnabled(true);} 
     else { 
      bckmenu.setEnabled(false); 
      bckmenu.setIcon(R.drawable.ic_menu_back_d); } 
     if(myWebView.canGoForward()) { 
      fwdmenu.setIcon(R.drawable.ic_menu_forward); 
      fwdmenu.setEnabled(true);} 
     else { 
      fwdmenu.setEnabled(false); 
      fwdmenu.setIcon(R.drawable.ic_menu_forward_d);} 
    } 

private class mywebclient extends WebViewClient { 
    // handles "mailto:" html and opens the action chooser 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.startsWith("mailto:")) { 
       Intent intent = new Intent(Intent.ACTION_SENDTO, 
         Uri.parse(url)); 
       startActivity(intent); 
       return true; 
     }else if(url.startsWith("http:") || url.startsWith("https:")) { 
      myWebView.loadUrl(url); 
      return false; 
     } 
     return true; 
    } 
    //on page load 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     //change refresh to stop 
     refresh = false; 
     refmenu.setIcon(R.drawable.ic_menu_stop); 
     updateicons(); 
    } 
    //on page finished 
    public void onPageFinished(WebView view, String url) { 
     //change stop to refresh 
     updateicons(); 
     refmenu.setIcon(R.drawable.ic_menu_refresh); 
     refresh = true; 
    } 
} 

@Override 
public void onBackPressed() 
{ 
    // choose what back button does 
    if(myWebView.canGoBack()) 
     myWebView.goBack(); 
    else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getSupportMenuInflater(); 
    inflater.inflate(R.menu.activity_browsermenu, menu); 
    fwdmenu = menu.findItem(R.id.fwd); 
    bckmenu = menu.findItem(R.id.bck); 
    refmenu = menu.findItem(R.id.ref); 
    inflater.inflate(R.menu.activity_open, menu); 
    updateicons(); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    //refresh/stop button 
    case R.id.ref: 
     if(refresh == true) 
      myWebView.reload(); 
     if(refresh == false) 
      myWebView.stopLoading(); 
     return true; 
    //back button 
    case R.id.bck: 
     if(myWebView.canGoBack()) 
      myWebView.goBack(); 
     updateicons(); 
     return true; 
    //forward button 
    case R.id.fwd: 
     if(myWebView.canGoForward()) 
      myWebView.goForward(); 
     updateicons(); 
     return true; 
    //open in browser button 
    case R.id.open: 
     Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse("http://www.csustan.edu/asi-usu/new_index.php")); 
     startActivity(intent); 
     return true; 
    //home button 
    case android.R.id.home: 
     // This ID represents the Home or Up button. In the case of this 
     // activity, the Up button is shown. Use NavUtils to allow users 
     // to navigate up one level in the application structure. For 
     // more details, see the Navigation pattern on Android Design: 
     // 
     // http://developer.android.com/design/patterns/navigation.html#up-vs-back 
     // 
     NavUtils.navigateUpFromSameTask(this); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

} 

这适用于肖像,但由于一些奇怪的原因,它在景观崩溃这是错误:

工作正常,如果我删除onpagestarted所有代码,但是这显然打破了刷新/停止。

05-06 11:09:05.594: E/AndroidRuntime(21915): FATAL EXCEPTION: main 
05-06 11:09:05.594: E/AndroidRuntime(21915): java.lang.NullPointerException 
05-06 11:09:05.594: E/AndroidRuntime(21915): at com.csu.stan.asiusu.Site.updateicons(Site.java:53) 
05-06 11:09:05.594: E/AndroidRuntime(21915): at com.csu.stan.asiusu.Site$mywebclient.onPageStarted(Site.java:85) 
05-06 11:09:05.594: E/AndroidRuntime(21915): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:314) 
05-06 11:09:05.594: E/AndroidRuntime(21915): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-06 11:09:05.594: E/AndroidRuntime(21915): at android.os.Looper.loop(Looper.java:137) 
05-06 11:09:05.594: E/AndroidRuntime(21915): at android.app.ActivityThread.main(ActivityThread.java:5226) 
05-06 11:09:05.594: E/AndroidRuntime(21915): at java.lang.reflect.Method.invokeNative(Native Method) 
05-06 11:09:05.594: E/AndroidRuntime(21915): at java.lang.reflect.Method.invoke(Method.java:511) 
05-06 11:09:05.594: E/AndroidRuntime(21915): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
05-06 11:09:05.594: E/AndroidRuntime(21915): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
05-06 11:09:05.594: E/AndroidRuntime(21915): at dalvik.system.NativeStart.main(Native Method) 

任何帮助将不胜感激谢谢。

回答

0

我想当你旋转时,对你的WebView的引用丢失了。您可以重新设置它,或者在清单中为此活动调整android:configChanges =“orientation”。

+0

不,它仍然会加载得很好,“refmenu.setIcon(R.drawable.ic_menu_stop);” &updateicons();删除,所以它在横向加载,但有关该代码阻止它加载。 – 2013-05-06 18:52:06

+0

这是因为您的_NullPointerException_在_updateicons()_中的第53行。所以我相信myWebView,bckmenu或fwdmenu是空的。你可以尝试在那里加载你的视图引用: 'if(myWebView == null){ myWebView =(WebView)findViewById(R.id.webview); }' – 2013-05-06 19:08:34

+0

我做了一些测试,bckmenu,fwdmenu和refmenu都是空的,这意味着由于某种原因在风景上,他们不被称为 – 2013-05-06 20:05:23