Android - getActionBar()。setDisplayHomeAsUpEnabled()崩溃应用程序,仅在小型法语屏幕上

时间:2013-04-27 19:26:04

标签: java android localization nexus-4

因此,我正在使用法语本地化我的应用程序以使用不同的语言,并且遇到了一个奇怪的问题。

创建活动后,我致电getActionBar().setDisplayHomeAsUpEnabled(true);。这在我的Nexus 7上用英语和法语进行测试时效果很好,并且在使用默认(英语)资源时可以在我的Nexus 4上正常工作。

但是,如果我尝试使用法语在我的Nexus 4上启动有问题的活动(即手机设置为法语,但如果我尝试将应用程序强制为法语,也会出现问题),应用程序崩溃,用Eclipse告诉我有一个空指针异常。我确定问题是setDisplayHomeAsUpEnabled()来电。

传递false代替true也会崩溃。在不进行任何进一步调用的情况下调用getActionBar()不会导致应用程序崩溃。应用程序是根据Master-Detail流程设置的(因此应用程序的核心是两个Activity-Fragment对,一个List和一个Detail),我认为这是为什么Nexus 7版本可以正常工作,尽管Nexus 4版本崩溃。

我已经仔细检查了我的valuesvalues-fr个文件夹,我确信values-fr中没有遗漏或额外的资源。

关于为什么会发生这种情况的任何线索?

这是LogCat告诉我的:

04-27 15:13:44.968: D/AndroidRuntime(4244): Shutting down VM
04-27 15:13:44.968: W/dalvikvm(4244): threadid=1: thread exiting with uncaught exception (group=0x41429930)
04-27 15:13:44.978: E/AndroidRuntime(4244): FATAL EXCEPTION: main
04-27 15:13:44.978: E/AndroidRuntime(4244): java.lang.RuntimeException: Unable to start activity ComponentInfo{ca.hachesoftware.soilbearingcapacity/ca.hachesoftware.soilbearingcapacity.ScreenDetailActivity}: java.lang.NullPointerException
04-27 15:13:44.978: E/AndroidRuntime(4244):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at android.os.Looper.loop(Looper.java:137)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at android.app.ActivityThread.main(ActivityThread.java:5041)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at java.lang.reflect.Method.invokeNative(Native Method)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at java.lang.reflect.Method.invoke(Method.java:511)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at dalvik.system.NativeStart.main(Native Method)
04-27 15:13:44.978: E/AndroidRuntime(4244): Caused by: java.lang.NullPointerException
04-27 15:13:44.978: E/AndroidRuntime(4244):     at ca.hachesoftware.soilbearingcapacity.ScreenDetailActivity.onCreate(ScreenDetailActivity.java:34)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at android.app.Activity.performCreate(Activity.java:5104)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
04-27 15:13:44.978: E/AndroidRuntime(4244):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
04-27 15:13:44.978: E/AndroidRuntime(4244):     ... 11 more

2 个答案:

答案 0 :(得分:2)

所以对于那些感兴趣的人,虽然我没有发现问题背后的原因,但我发现我可以阻止它。我开始本地化时所做的是复制整个values文件夹并附加语言代码,使其成为values-fr。文件夹中有两个文件strings.xmlstyles.xml,后者在默认版本和-fr版本中都相同。

styles.xml删除values-fr,但在values中保留原样,解决了问题(并且还阻止了法语界面与英文版本不同)。

答案 1 :(得分:0)

确保两件事: 1)通过在onCreate方法的顶部使用@SuppressLint(“NewApi”)来抑制Lint错误。 (我猜你可能已经做过了!) 2)您必须包含Android清单文件中指定的minSdk。 保留这些行:(紧跟清单标记之后)

 <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" /> 

希望有所帮助!