android - 方法 supportInvalidateOptionsMenu 在 android 2.3 抛出 stackoverflowerror

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

我在我的项目中使用 actionbarsherlock,我试图从 fragment 中操作操作栏...

所以在我显示的第一个 fragment 中,我重写了 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

最佳答案

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

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

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

关于android - 方法 supportInvalidateOptionsMenu 在 android 2.3 抛出 stackoverflowerror,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19493696/

相关文章:

android - ActionBarSherlock 背景的图像大小

android - 如何在android中使用volley发送(POST)xml文件

android - Kotlin 协程不下载数据

android - onPrepareOptionsMenu 未被调用

Android Sherlock ActionBar 向上按钮

android - 如何实现不同进程中Service和Activity之间的通信?

java - 安卓java : accessing class that has parentActivity

android - "Unable to open log device '/dev/log/main ': No such file or directory"

java - 具有正确端点的 Android BulkTransfer 没有响应

android - 基于 Firebase 控制台的通知中消息文本的字符限制是多少?