2012-03-03 53 views
2

我现在面临一个奇怪的问题,我的应用程序:的Android的PhoneGap和菜单崩溃,web视图

当按下菜单按钮,我的应用程序崩溃。但!只有当我在webview中启动应用程序!

这个工程:这里

super.loadUrl("http://www.url.com"); 

菜单加载和一切都很好,但因为我不能让“shouldOverrideUrlLoading”使用super.loadurl工作,我试图启动应用程序直到webview中。

mwebview.loadurl("http://url.com"); 确实工作,但如果我按菜单按钮,它会崩溃。

我的菜单程序做出像这样:

@Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
     //Menu that appears when menu button is pressed on device 
     Menu m_menu = menu; 
     m_menu.add(Menu.NONE, Menu.FIRST+6, 0, "Hjem"); 
     m_menu.add(Menu.NONE, Menu.FIRST+7, 0, "Om"); 
     m_menu.add(Menu.NONE, Menu.FIRST+5, 0, "Avslutt"); 
     return super.onCreateOptionsMenu(menu); 
     } 

我的继承人活动:

@Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     super.setBooleanProperty("loadInWebView", true); 
     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.getSettings().setBuiltInZoomControls(false); 
     mWebView.requestFocusFromTouch(); 
     mWebView.setWebViewClient(new HelloWebViewClient()); 
     mWebView.setWebChromeClient(new WebChromeClient()); 

      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN | 
      WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
      super.setIntegerProperty("splashscreen", R.drawable.splash); 
      super.setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
      super.loadUrl("http://www.url.com/app/index"); 
//mWebView.loadurl("url"); 
      } 
     private class HelloWebViewClient extends WebViewClient { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
       return true; 
      } 

     } 

继承人的错误在目录下载:

03-03 10:00:26.893: E/AndroidRuntime(350): FATAL EXCEPTION: main 
03-03 10:00:26.893: E/AndroidRuntime(350): java.lang.NullPointerException 
03-03 10:00:26.893: E/AndroidRuntime(350): at com.phonegap.DroidGap.postMessage(DroidGap.java:943) 
03-03 10:00:26.893: E/AndroidRuntime(350): at com.phonegap.DroidGap.onCreateOptionsMenu(DroidGap.java:1374) 
03-03 10:00:26.893: E/AndroidRuntime(350): at blogreel.app.HelloAppActivity.onCreateOptionsMenu(HelloAppActivity.java:44) 
03-03 10:00:26.893: E/AndroidRuntime(350): at android.app.Activity.onCreatePanelMenu(Activity.java:2148) 
03-03 10:00:26.893: E/AndroidRuntime(350): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:305) 
03-03 10:00:26.893: E/AndroidRuntime(350): at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:550) 
03-03 10:00:26.893: E/AndroidRuntime(350): at com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1192) 
03-03 10:00:26.893: E/AndroidRuntime(350): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1648) 
03-03 10:00:26.893: E/AndroidRuntime(350): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471) 
03-03 10:00:26.893: E/AndroidRuntime(350): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441) 
03-03 10:00:26.893: E/AndroidRuntime(350): at android.view.ViewRoot.handleMessage(ViewRoot.java:1735) 
03-03 10:00:26.893: E/AndroidRuntime(350): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-03 10:00:26.893: E/AndroidRuntime(350): at android.os.Looper.loop(Looper.java:123) 
03-03 10:00:26.893: E/AndroidRuntime(350): at android.app.ActivityThread.main(ActivityThread.java:4627) 
03-03 10:00:26.893: E/AndroidRuntime(350): at java.lang.reflect.Method.invokeNative(Native Method) 
03-03 10:00:26.893: E/AndroidRuntime(350): at java.lang.reflect.Method.invoke(Method.java:521) 
03-03 10:00:26.893: E/AndroidRuntime(350): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
03-03 10:00:26.893: E/AndroidRuntime(350): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
03-03 10:00:26.893: E/AndroidRuntime(350): at dalvik.system.NativeStart.main(Native Method) 

这样的IM问: 任何方式在直接加载到webview时使我的菜单工作? 或者当使用“super.loadurl”

编辑 要补充一句的第一个页面加载super.loadurl做工作,使在所有网址“Shouldoverrideurl”的工作。指定的网址具有链接,点击后链接会在同一个网页视图中重定向。但是,第二页的链接将在新的浏览器中触发。

任何指针是极大的赞赏:)

回答

4

这是我设法菜单按钮支持添加到PhoneGap的和常规的Android网页视图的答复:) 而与此项目

//basic menu button support 
@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    super.onCreateOptionsMenu(menu); 
    MenuItem item = menu.add("Refresh"); 
    item = menu.add("Quit"); 
    return true; 
} 

//handle menu item selection 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    if (item.hasSubMenu() == false) 
    { 
     if("Quit"==item.getTitle()) { 
      finish(); 
     } 
     if("Refresh"==item.getTitle()) { 
      super.loadUrl("file:///android_asset/www/index.html"); 
     } 
    } 
    return true; 
} 
+0

嗨,谢谢您使用mWebView.loadurl代替super.loadurl的方法?你的方法在我的项目上崩溃,但生病继续尝试=)它告诉我menuitem item = menu.add行永远不会被读取。哼! – Havihavi 2012-03-03 10:02:13

+0

不,我使用* super.loadUrl(“file:///android_asset/www/index.html”); * 我已经更新了我的示例 – 2012-03-03 10:38:29

+0

另外请注意* super.onCreateOptionsMenu(menu); * at the – 2012-03-03 10:40:42