我正在开发一个扫描条形码的应用程序,当它成功扫描时,它会显示一个带有扫描代码的Dialog,根据条形码/二维码中包含的内容,它会显示一个打开的按钮在显示对话框时,如果屏幕改变方向,它会崩溃。我已经让它工作到崩溃之前方向可以改变几次,但是当我检查LogCat它说NullPointerException导致FC。在我实施@CommonsWare的建议之前,我可以让它在崩溃之前旋转任意次数,但是因为我已经实现了它,所以FC在第二个方向上总是会改变。当我在debug mode
中启动时,我可以根据需要随意旋转手机,但是一旦我在正常模式下启动它,它总会崩溃。
类字段:
private String currentType;
我实施了onSaveInstanceState()
:
@Override
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putString("savedType", currentType);
}
另外onRestoreInstanceState()
:
@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
currentType = savedInstanceState.getString("savedType");
}
根据@ CommonsWare的建议,我已将上述代码更新为目前的代码。我还编辑了我的完整性帖子。
我也使用CM7(Android版本 - 2.3.7,内核版本 - 2.6.37.6-cyanogenmod-g0799e00 android @ portatile#1,Mod版本 - CyanogenMod-7-11152011-NIGHTLY-N1,内部版本号 - GWK74 )。
答案 0 :(得分:1)
在onPause()中,我使用this.onRetainNonConfigurationInstance()试图解决这个问题,但它似乎没有什么区别。
您不会致电onRetainNonConfigurationInstance()
。 Android调用onRetainNonConfigurationInstance()
。
根据我阅读的有关处理方向变化的所有帖子,我想在我看来这也应该有效。
您需要使用更好的资源。
尝试修复代码:
步骤1:从清单
中的android:configChanges
删除<activity>
属性
第2步:删除onConfigurationChanged()
方法
步骤3:将您的onResume()
逻辑移至onCreate()
以填充currentType
,或者不要在currentType
更好的方法是将onRetainNonConfigurationInstance()
/ getLastNonConfigurationInstance()
替换为onSaveInstanceState()
/ onRestoreInstanceState()
,将String
放入Bundle
。
Here is a sample project演示使用onSaveInstanceState()
。 Here is a sample project演示了onRetainNonConfigurationInstance()
的使用情况。