getActionBar()返回null

时间:2015-04-18 21:53:29

标签: android android-actionbar

我需要在setContentView之前准备好我的操作栏,因为它由navDrawerFragment使用,但此时:

public class BaseActivity extends Activity implements NavigationDrawerFragment.NavigationDrawerCallbacks {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_ACTION_BAR);
    Log.d("", getActionBar().toString());
    setContentView(R.layout.activity_base);
}

返回null

我的主题:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/light_blue</item>
    <item name="colorPrimaryDark">@color/dark_blue</item>
    <item name="colorAccent">@color/dark_blue</item>
    <item name="android:windowBackground">@color/white</item>
    <item name="android:positiveButtonText">@color/white</item>
    <item name="android:windowActionBar">true</item>
</style>

和清单上的声明:

<activity
    android:name=".controller.activity.BaseActivity"
    android:label="@string/app_name" >
</activity>

3 个答案:

答案 0 :(得分:3)

  1. BaseActivity必须extends来自ActionBarActivity而不是Activity

    public class BaseActivity extends ActionBarActivity implements NavigationDrawerCallbacks {

  2. 使用getSupportActionBar();获取 ActionBar

答案 1 :(得分:2)

您的问题是这两件事中的一件,或两者兼而有之。至少他们应该是,除非我疯了......

要么问题是你正在打电话

getActionBar()

在设置contentView之前 所以把它改成

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_ACTION_BAR);
    setContentView(R.layout.activity_base);
    Log.d("", getActionBar().toString());
}

这是你需要打电话

getSupportActionBar()

尝试两者并告诉我哪些有效!

答案 2 :(得分:1)

您正在使用支持库(AppCompat),因此您必须致电getSupportActionBar()