我想不出这个。我正在自定义我的ActionBar(是的,我的应用程序是3.0+),代码在设备上运行良好(如果重要的话,可以使用Motorola Xoom)。但是当我在模拟器上运行这个时,它会抛出NPE。这是我的ActionBar代码
/**
* Customizes Action bar sets background color and assigns a layout to it
*/
private void customActionBar() {
Log.v(TAG, "customizing ActionBar Entry");
ActionBar actionBar = getActionBar();
Log.v(TAG, "customizing ActionBar : "+actionBar.toString());
//This is where i get NPE
actionBar.setBackgroundDrawable(new ColorDrawable(Color
.parseColor(Constants.COLOR)));
Log.v(TAG, "customizing ActionBar -Background color : ");
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.custom_action, null);
// lay.setLayoutParams(new ActionBar.LayoutParams(
// android.app.ActionBar.LayoutParams.MATCH_PARENT,
// android.app.ActionBar.LayoutParams.MATCH_PARENT));
actionBar.setCustomView(view);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
Log.v(TAG, "customizing ActionBar Exit");
}
编辑:logcat
V/>>> FullPdfViewerActivity(438): customizing ActionBar Entry
D/AndroidRuntime(438): Shutting down VM
W/dalvikvm(438): threadid=1: thread exiting with uncaught exception (group=0x40014760)
E/AndroidRuntime(438): FATAL EXCEPTION: main
E/AndroidRuntime(438): java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.test.android.tester/com.test.android.tester.core.AwesomePagerActivity}: java.lang.NullPointerException
E/AndroidRuntime(438): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
E/AndroidRuntime(438): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
E/AndroidRuntime(438): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
E/AndroidRuntime(438): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
E/AndroidRuntime(438): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(438): at android.os.Looper.loop(Looper.java:126)
E/AndroidRuntime(438): at android.app.ActivityThread.main(ActivityThread.java:3997)
E/AndroidRuntime(438): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(438): at java.lang.reflect.Method.invoke(Method.java:491)
E/AndroidRuntime(438): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
E/AndroidRuntime(438): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
E/AndroidRuntime(438): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(438): Caused by: java.lang.NullPointerException
E/AndroidRuntime(438): at com.test.android.tester.core.AwesomePagerActivity.customActionBar(AwesomePagerActivity.java:227)
E/AndroidRuntime(438): at com.test.android.tester.core.AwesomePagerActivity.onCreate(AwesomePagerActivity.java:187)
E/AndroidRuntime(438): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
E/AndroidRuntime(438): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
E/AndroidRuntime(438): ... 11 more
我从oncreate()调用这个。我担心它是否适用于其他设备??
蒂亚
最佳答案
我认为,getActionBar()
返回空值。当在activity的getActionBar()
之前调用setContentView()
时,我看到了这种行为,但只有在android 3.0和3.1上,android3.2的顺序无关紧要。
在自定义操作栏之前尝试调用setContentView
。