Android PhoneGap и меню вылетает с веб-просмотра - PullRequest
2 голосов
/ 03 марта 2012

У меня странная проблема с моим приложением:

При нажатии кнопки меню мое приложение вылетает. НО! только когда я запускаю приложение в webview!

это работает:

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

Меню загружается здесь, и все в порядке, но так как я не могу заставить "shouldOverrideUrlLoading" работать с использованием super.loadurl, я пытаюсь запустить приложение прямо в веб-просмотре.

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

        }

Вот ошибка в catlog:

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)

Итак, я спрашиваю: Есть ли способ заставить мое меню работать при загрузке прямо в веб-просмотр? Или заставить "Shouldoverrideurl" работать на всех URL при использовании "super.loadurl"

редактировать Должен добавить, что первая страница super.loadurl загружается. указанный URL-адрес содержит ссылки, которые при нажатии перенаправляют в пределах одного веб-просмотра. однако ссылки на второй странице будут срабатывать в новом браузере.

Любые указатели приветствуются:)

1 Ответ

4 голосов
/ 03 марта 2012

Вот так мне удалось добавить поддержку кнопок меню в PhoneGap и обычные проекты Android Webview

//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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...