Vor*_*ier 25 java android android-fragments android-activity
我知道有许多问题在关于保存事件状态,但我无法找到问题的答案.
我有一个扩展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编译的
Mar*_*ski 68
除非你的应用程序在Android或更新版本的Lollipop(API21)版本上运行,否则你的应用程序
public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);
Run Code Online (Sandbox Code Playgroud)
将不被称为它根本不会在较早版本的平台比21的存在是为了支持预API 21级的设备,你必须,而不是上面,覆盖下面的方法:
public void onSaveInstanceState (Bundle outState);
Run Code Online (Sandbox Code Playgroud)
这也适用于API 21+,因此您不需要覆盖这两种方法(除非您知道需要处理PersistableBundle新的提议).
查看文档.
| 归档时间: |
|
| 查看次数: |
6484 次 |
| 最近记录: |