使用 Theme.AppCompat.Light.DarkActionBar 时 android.app.ActionBar.setCustomView(int) 上的 NP

NP on android.app.ActionBar.setCustomView(int) when using Theme.AppCompat.Light.DarkActionBar

我已将我的 eclipse 项目导入到 Android 工作室,一切正常。我有自定义 Actionbar

这是这样的:Oncreate of an activity 我有以下内容

 getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
 getActionBar().setCustomView(R.layout.bartitle);
 TextView textViewTitle = (TextView) findViewById(R.id.titleEDIT);
 textViewTitle.setText(res.getString(R.string.title));
 setContentView(R.layout.register);

现在我也为 v21 添加了样式。

Style.xml 版本 21 具有以下内容:

<resources>
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowActionBar">true</item>
    </style>
</resources>

当我 运行 项目时:我得到一个白屏并强制关闭并显示以下错误日志:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.flm.sPar/com.flm.sPar.Register}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setCustomView(int)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
        at android.app.ActivityThread.access0(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setCustomView(int)' on a null object reference
        at com.flm.sPar.Register.onCreate(Register.java:71)
        at android.app.Activity.performCreate(Activity.java:5990)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access0(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

我一直在努力解决这个问题。尝试了 SO 或 Google 上给出的所有解决方案,但无法解决问题。因此想问一个关于SO的问题。

谢谢!

使用 getSupportActionBar() 而不是 getActionBar() 因为您使用的是 AppCompat 库。如果您使用的是 v7 appcompat 库,您的 activity 应该改为扩展 AppCompatActivity 而不是 Activity.

ActionBarActivity 在支持库的修订版 22.1.0 中已弃用,因此应使用 AppCompatActivity 而不是用户在评论中建议的 ActionBarActivity。

希望这能解决您的问题:)