【问题标题】:Android NullPointerException on onCreateOptionsMenuAndroid NullPointerException onCreateOptionsMenu
【发布时间】:2013-05-20 12:50:45
【问题描述】:

这是我的代码:

public class className extends Activity{
    private MenuActivity menuActivity;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        try {
            ViewConfiguration config = ViewConfiguration.get(this);
            Field menuKeyField = ViewConfiguration.class
                .getDeclaredField("sHasPermanentMenuKey");
            if (menuKeyField != null) {
                menuKeyField.setAccessible(true);
                menuKeyField.setBoolean(config, false);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        menuActivity = new MenuActivity(this, context, R.menu.menu);
        );
    }
    @Override


    public boolean onCreateOptionsMenu(Menu menu) {
        menuActivity.onCreateOptionsMenu(menu);   // <--
        return super.onCreateOptionsMenu(menu);
    }
}

public class MenuActivity {
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = mRootActivity.getMenuInflater();
        inflater.inflate(typeMenu, menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
    }

    // ...
}

我在行收到NullPointerException

menuActivity.onCreateOptionsMenu(menu);

这个例外只存在于一些像 Galaxy Note 这样的手机上。 你知道为什么会出现这个异常吗?

【问题讨论】:

    标签: android exception menu nullpointerexception oncreateoptionsmenu


    【解决方案1】:

    // 膨胀菜单;如果存在,这会将项目添加到操作栏。 getMenuInflater().inflate(R.menu.main, menu);

    【讨论】:

    • 我有它“inflater.inflate(R.menu.menu, menu);”
    • 在我的手机上工作正常问题只是一些手机,例如 Galaxy note,它在模拟器中也工作正常,我不知道为什么这个初始化在某些手机上崩溃,我不知道知道如何复制这个异常
    【解决方案2】:

    修改代码

      public boolean onCreateOptionsMenu(Menu menu) {
        menuActivity.onCreateOptionsMenu(menu);   // <--
        return super.onCreateOptionsMenu(menu);
    }
    

     public boolean onCreateOptionsMenu(Menu menu) {
       MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);  // <--
        return true;
    }
    

    这适用于我的程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多