使用 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。
希望这能解决您的问题:)
我已将我的 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。
希望这能解决您的问题:)