[英]Why is Android Studio telling me to use getSupportActionBar() instead of getActionBar()?
[英]Android getActionBar vs getSupportActionBar?
這是我的代碼:
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");
}
使用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
為什么? 來自android文檔:
警告:確保從相應的包中導入ActionBar類(和相關的API):
如果支持的API級別低於11:import android.support.v7.app.ActionBar
如果僅支持API級別11及更高級別:import android.app.ActionBar
現在為什么這個應用程序崩潰了?
如果您正在使用AppCompat,無論您的應用程序運行的是哪個Android版本,您都必須調用getSupportActionBar()
。
您定位的是哪個Android版本?
我建議你使用新的工具欄而不是ActionBar,因為它的使用方式更靈活。
如果您正在擴展AppCompatActivity
那么您將為較舊的Android版本提供后向支持,為此您必須使用getSupportActionBar()
。
如果要導入android.app.ActionBar
則必須使用getActionBar()
,如果要導入android.support.v7.app.ActionBar
則必須使用getSupportActionBar()
。
注意:通過使用android.support.v7.app.ActionBar
,您可以為較舊的Android版本提供后向支持。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.