我知道有许多问题在关于保存事件状态,但我无法找到问题的答案.
我有一个扩展AppCompatActivity的活动; 此活动使用3个片段,它有一个变量'int currentStep'来跟踪正在显示的片段.在onSavedInstanceState方法中,我将currentStep变量存储在bundle中,然后在onCreate方法中我将其恢复.
public class MainActivity extends AppCompatActivity {
private final String CURRENT_STEP_TAG = "current_step";
private int currentStep;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pedido);
if(savedInstanceState == null) {
loadFirstFragment();
} else {
currentStep = savedInstanceState.getInt(CURRENT_STEP_TAG);
if(currentStep == 2){
//Do some stuff...
}
}
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
Log.d("deubg", "--------onsaveinstancestate--------");
outState.putInt(CURRENT_STEP_TAG, currentStep);
super.onSaveInstanceState(outState, outPersistentState);
}
...
}
Run Code Online (Sandbox Code Playgroud)
问题是onSavedInstanceState在屏幕变化时不会被调用,并且根据谷歌文档,它应该.消息"-------- onsaveinstancestate --------"未在控制台中显示.但是,onCreate方法中的Bundle savedInstanceState在屏幕旋转后为非null,但它没有int'sturrentStep'.
我尝试了很多东西:为ActionBarActivity更改了AppCompatActivity,将super.onSavedInstanceState的调用移到了不同的位置,试图存储其他变量; 但无论我做什么,该方法都不会执行.
另外,我的清单中没有android:configChanges.
我的应用程序是针对sdk版本22,buildToolsVersion 22.0.1编译的
首先,我知道有很多关于这个主题的问题/答案,我已经阅读了大部分内容但仍然收到错误:
05-17 02:57:06.522: E/AndroidRuntime(17073): java.lang.NoClassDefFoundError: ar.com.package.android.MainActivity
Run Code Online (Sandbox Code Playgroud)
该项目工作正常,直到我将Eclipse从21更新到22.
我尽我所能:我检查了清单; 清理了项目; 检查了我的构建路径,在不同的Android版本中尝试了应用程序,将java合规性级别设置为1.6(库也是如此)等等.我只是无法弄清楚问题是什么.
这是我的清单,我发现它没有任何问题:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ar.com.package.android"
android:versionCode="1"
android:versionName="1.0" >
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<permission
android:name="ar.com.package.android.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="ar.com.package.android.permission.MAPS_RECEIVE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Sherlock.Light.DarkActionBar"
android:hardwareAccelerated="true">
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="my key"/>
<activity
android:name="ar.com.package.android.SplashScreen"
android:label="@string/app_name"
android:noHistory="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:windowSoftInputMode="stateHidden"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="ar.com.package.android.MainActivity"
android:logo="@drawable/logo"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden"
>
</activity>
<activity
android:name="ar.com.package.android.SearchForm" …
Run Code Online (Sandbox Code Playgroud)