我目前正在android studio中创建actionBar,并且已经创建了操作按钮,我的目标是每次单击按钮时都有一个下拉菜单。

在我的menu_main.xml中,添加了项目搜索和帮助:

        <item
        android:id="@+id/menu_search"
        android:icon="@drawable/ic_action_search"
        android:title="@string/menu_search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="collapseActionView|ifRoom"/>

        <item android:id="@+id/action_help"
        android:icon="@drawable/ic_action_help"
        android:title="@string/action_help"
        app:showAsAction="ifRoom"/>


在我的MainActivity.java中,我为下拉菜单添加了字符串:

    String[] actions = new String[] {
            "Bookmark", "Subscribe", "Share", "Like"
    };


在我的onOptionsItemSelected()方法中,我添加了以下情况:每次单击此按钮时,它将调用一个函数。这是我的代码:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        switch (item.getItemId()) {
            case R.id.action_help:
                helpMessage();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

        private void helpMessage() {
            //Toast.makeText(this, "Location button pressed", Toast.LENGTH_SHORT).show();
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_spinner_dropdown_item, actions);
            System.out.println("HERE: " + getActionBar());
            getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
            ActionBar.OnNavigationListener navigationListener = new ActionBar.OnNavigationListener() {
                @Override
                public boolean onNavigationItemSelected(int itemPosition, long itemId) {
                    Toast.makeText(getBaseContext(), "You selected : " + actions[itemPosition], Toast.LENGTH_SHORT).show();
                    return false;
                }
            };
            getActionBar().setListNavigationCallbacks(adapter, navigationListener);
        }


当我运行程序时,我的应用程序将崩溃,并且我得到


  NullPointerException:尝试调用虚拟方法“ void”
  空对象上的android.app.ActionBar.setNavigationMode(int)'
  参考


它指向getActionBar(),它为NULL。
有什么想法吗?

最佳答案

我总是有这个错误。
我找到了一个解决方案,将其放在我的Style中将起作用,并且getActionBar()不再为null ...

<item name="android:windowNoTitle">false</item>
<item name="android:windowActionBar">true</item>


希望这对你有帮助

10-08 19:27