Android - getActionBar()null引用

时间:2016-01-19 06:52:37

标签: android android-appcompat

我正在使用DrawerLayout

关注此Androidhive tutorial的滑动菜单

我已经尝试使用他们的代码制作一个新项目并且它可以工作,但是!当我尝试将它应用到我的实际类中时,它不起作用.........它返回null值。我用它就像..

ActionBar actionBar = getActionBar();
...
actionbar.setDisplayHomeAsUpEnabled(true);
actionbar.setHomeButtonEnabled(true);

我使用了主题:

<style name="AppThemeWithAction" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="colorControlNormal">@color/textColor</item>
        <item name="colorControlActivated">@color/miBlue</item>
    </style>

我研究过它可能是因为我没有TitleBar,但它似乎不是那样......

如果我错过了解决问题的任何基本信息,请发表评论

更新:

我正在尝试不修改源代码,例如将ActionBar更改为Toolbar,因为我可能会在进程中破坏其他内容。

所以..我现在的问题是.. ActionBar上的每个方法都可以用于Toolbar吗?以前的酒吧有没有相当于后者的酒吧??

例如:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, //nav menu toggle icon
                R.string.app_name, // nav drawer open - description for accessibility
                R.string.app_name // nav drawer close - description for accessibility
        ){
            public void onDrawerClosed(View view) {
                getActionBar().setTitle(mTitle);
                // calling onPrepareOptionsMenu() to show action bar icons
                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                getActionBar().setTitle(mDrawerTitle);
                // calling onPrepareOptionsMenu() to hide action bar icons
                invalidateOptionsMenu();
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

更改为Toolbar会导致Kitkat及以下的兼容性问题吗?

2 个答案:

答案 0 :(得分:2)

如果您使用的是AppCompat,无论您的应用运行哪个Android版本,都必须致电getSupportActionBar()

ActionBar actionBar =getSupportActionBar();

我建议您使用新的Toolbar代替ActionBar,因为使用起来更灵活。

答案 1 :(得分:0)

您必须将活动扩展为

public yourActivityName extends AppCompatActivity

然后使用

  ActionBar actionBar = getSupportActionBar();

导入ActionBar作为支持v7