【问题标题】:Method supportInvalidateOptionsMenu throws stackoverflowerror at android 2.3方法 supportInvalidateOptionsMenu 在 android 2.3 抛出 stackoverflowerror
【发布时间】:2013-10-21 11:48:45
【问题描述】:

我在我的项目中使用 actionbarsherlock,我正在尝试从片段中操作操作栏...

所以在我显示的第一个片段中,我重写了 onPrepareOptionsMenu 以使操作栏无效并更改标题...但是当我尝试调用 supportInvalidateOptionsMenu() 时,我得到一个 java.lang.StackOverflowError(虽然它不会在 android 4.3 上发生)...

我试过Delyan's solution 没有成功...我的代码和日志如下,有什么建议吗?提前致谢

---------代码---------

@Override
public void onPrepareOptionsMenu(Menu menu){
    super.onPrepareOptionsMenu(menu);
    Log.e("CategoriasLista", "Executou onPrepareOptionsMenu");
    int currentTab = ((MainActivity)getSherlockActivity()).getTabHost().getCurrentTab();
    if(currentTab==0){
        ActionBar bar = getSherlockActivity().getSupportActionBar();
        //getSherlockActivity().supportInvalidateOptionsMenu();
        ((MainActivity)getSherlockActivity()).runOnUiThread(new Runnable(){
            @Override
            public void run(){
                ((MainActivity)getSherlockActivity()).supportInvalidateOptionsMenu();
            }
        });
        bar.setNavigationMode(com.actionbarsherlock.app.ActionBar.NAVIGATION_MODE_STANDARD);
        bar.setTitle("Categorias");

    }
}

---------日志-----------

10-21 09:35:32.910: ERROR/AndroidRuntime(5231): FATAL EXCEPTION: main
    java.lang.StackOverflowError
    at java.lang.Class.getClassLoaderImpl(Class.java:431)
    at java.lang.Class.getClassLoader(Class.java:398)
    at android.os.Bundle.<init>(Bundle.java:68)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.dispatchInvalidateOptionsMenu(ActionBarSherlockCompat.java:251)
    at com.actionbarsherlock.app.SherlockFragmentActivity.invalidateOptionsMenu(SherlockFragmentActivity.java:149)
    at com.actionbarsherlock.app.SherlockFragmentActivity.supportInvalidateOptionsMenu(SherlockFragmentActivity.java:155)
    at br.com.maisapp.Categorias.CategoriasLista$1.run(CategoriasLista.java:60)
    at android.app.Activity.runOnUiThread(Activity.java:3743)
    at br.com.maisapp.Categorias.CategoriasLista.onPrepareOptionsMenu(CategoriasLista.java:57)
    at android.support.v4.app.Watson.onPreparePanel(Watson.java:98)
    at com.actionbarsherlock.ActionBarSherlock.callbackPrepareOptionsMenu(ActionBarSherlock.java:581)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.preparePanel(ActionBarSherlockCompat.java:494)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.dispatchInvalidateOptionsMenu(ActionBarSherlockCompat.java:265)
    at com.actionbarsherlock.app.SherlockFragmentActivity.invalidateOptionsMenu(SherlockFragmentActivity.java:149)
    at com.actionbarsherlock.app.SherlockFragmentActivity.supportInvalidateOptionsMenu(SherlockFragmentActivity.java:155)
    at br.com.maisapp.Categorias.CategoriasLista$1.run(CategoriasLista.java:60)
    at android.app.Activity.runOnUiThread(Activity.java:3743)
    at br.com.maisapp.Categorias.CategoriasLista.onPrepareOptionsMenu(CategoriasLista.java:57)
    at android.support.v4.app.Watson.onPreparePanel(Watson.java:98)
    at com.actionbarsherlock.ActionBarSherlock.callbackPrepareOptionsMenu(ActionBarSherlock.java:581)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.preparePanel(ActionBarSherlockCompat.java:494)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.dispatchInvalidateOptionsMenu(ActionBarSherlockCompat.java:265)
    at com.actionbarsherlock.app.SherlockFragmentActivity.invalidateOptionsMenu(SherlockFragmentActivity.java:149)
    at com.actionbarsherlock.app.SherlockFragmentActivity.supportInvalidateOptionsMenu(SherlockFragmentActivity.java:155)
    at br.com.maisapp.Categorias.CategoriasLista$1.run(CategoriasLista.java:60)
    at android.app.Activity.runOnUiThread(Activity.java:3743)
    at br.com.maisapp.Categorias.CategoriasLista.onPrepareOptionsMenu(CategoriasLista.java:57)
    at android.support.v4.app.Watson.onPreparePanel(Watson.java:98)
    at com.actionbarsherlock.ActionBarSherlock.callbackPrepareOptionsMenu(ActionBarSherlock.java:581)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.preparePanel(ActionBarSherlockCompat.java:494)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.dispatchInvalidateOptionsMenu(ActionBarSherlockCompat.java:265)
    at com.actionbarsherlock.app.SherlockFragmentActivity.invalidateOptionsMenu(SherlockFragmentActivity.java:149)
    at com.actionbarsherlock.app.SherlockFragmentActivity.supportInvalidateOptionsMenu(SherlockFragmentActivity.java:155)
    at br.com.maisapp.Categorias.CategoriasLista$1.run(CategoriasLista.java:60)
    at android.app.Activity.runOnUiThread(Activity.java:3743)
    at br.com.maisapp.Categorias.CategoriasLista.onPrepareOptionsMenu(CategoriasLista.java:57)
    at android.support.v4.app.Watson.onPreparePanel(Watson.java:98)
    at com.actionbarsherlock.ActionBarSherlock.callbackPrepareOptionsMenu(ActionBarSherlock.java:581)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.preparePanel(ActionBarSherlockCompat.java:494)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.dispatchInvalidateOptionsMenu(ActionBarSherlockCompat.java:265)
    at com.actionbarsherlock.app.SherlockFragmentActivity.invalidateOptionsMenu(SherlockFragmentActivity.java:149)
    at com.actionbarsherlock.app.SherlockFragmentActivity.supportInvalidateOptionsMenu(SherlockFragmentActivity.java:155)
    at br.com.maisapp.Categorias.CategoriasLista$1.run(CategoriasLista.java:60)
    at android.app.Ac

【问题讨论】:

    标签: android actionbarsherlock android-2.3-gingerbread stack-overflow


    【解决方案1】:

    它很可能会抛出异常,因为您试图在错误的地方使其无效。

    如果您只是想更改标题,则将逻辑移至您的 onActivityCreated 方法。

    @Override
    protected void onActivityCreated(Bundle savedInstanceState) {
      super.onActivityCreated(savedInstanceState);
      getSherlockActivity.setTitle("Categorias");
    }
    

    【讨论】:

    • 也许这对我不起作用,因为我在一个片段中?将您的代码粘贴到我的片段后,需要将Bundle savedInstanceState 作为参数传递给onActivityCreated...在此之后,我仍然无法使菜单无效,尽管这次我没有收到任何错误
    • 我需要使菜单无效,因为当我的应用启动时,另一个选项卡中会出现一个微调器(请参阅此问题stackoverflow.com/questions/19451385/…
    • 在使用 getSherlockActivity().supportInvalidateOptionsMenu() 失效之前尝试调用 getSupportActionBar()
    • 感谢您的回答,但即使之前调用 getSupportActionBar(),我仍然会收到 StackOverflowError
    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 2015-10-28
    • 2012-04-29
    • 1970-01-01
    • 2013-01-12
    • 2017-09-10
    • 2018-07-10
    • 2023-03-10
    相关资源
    最近更新 更多