Android getActionBar vs getSupportActionBar?

Ami*_*thi 7 android android-actionbar

这是我的代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){

    //android.support.v7.app.ActionBar actionBar = getSupportActionBar();
    //actionBar.setTitle("Android");

    ActionBar actionBar = getActionBar();
    actionBar.setTitle("Droid");
}
Run Code Online (Sandbox Code Playgroud)

在使用getSupportActionBar()时,我的应用程序与kitkat和其他新版本运行良好,但使用getActionBar导致错误.

这是错误:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.hide()' on a null object reference
            at com.github.domain.geoquiz.QuizActivity.onCreate(QuizActivity.java:57)
            at android.app.Activity.performCreate(Activity.java:5933)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372
Run Code Online (Sandbox Code Playgroud)

为什么?来自android文档:

警告:确保从相应的包中导入ActionBar类(和相关的API):

如果支持的API级别低于11:import android.support.v7.app.ActionBar

如果仅支持API级别11及更高级别:import android.app.ActionBar

现在为什么这个应用程序崩溃了?

car*_*ger 12

如果您正在使用AppCompat,getSupportActionBar()无论您的应用程序运行的是哪个Android版本,您都必须打电话.

您定位的是哪个Android版本?

我建议你使用新的工具栏而不是ActionBar,因为它的使用方式更灵活.


Chi*_*hah 5

如果您要扩展,AppCompatActivity那么您是在为旧的 Android 版本提供向后支持,为此您必须使用getSupportActionBar().

如果要导入,android.app.ActionBar则必须使用getActionBar(),如果要导入,android.support.v7.app.ActionBar则必须使用getSupportActionBar().

注意:通过使用android.support.v7.app.ActionBar,您可以为较旧的 Android 版本提供向后支持。