- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
这是我保存的InstaceState 代码:
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
savedInstanceState.putStringArrayList("todo_arraylist", Altodo);
Log.v("bundle", "Saved");
super.onSaveInstanceState(savedInstanceState);
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (savedInstanceState != null)
{
Altodo = savedInstanceState.getStringArrayList("todo_arraylist");
Log.v("bundle", "Restored");
}
else
{
Log.v("bundle", "null");
}
setContentView(R.layout.main);
}
日志总是显示“bundle 保存”标签。
但是在onCreate
方法中,SavedInstanceState
总是为null。
最佳答案
我在一个项目中观察到完全相同的症状(报告为 issue 133394),该项目具有两个扩展 ActionBarActivity
的 Activity A 和 B。 Activity A 是主要 Activity ,返回时我总是在其列表 fragment 的 onCreate
中收到 null
for savedInstanceState
从详细 View Activity B。几个小时后,我发现这个问题是伪装的导航问题。
以下内容可能与我的设置相关,并且来自此页面上的其他答案:
super
调用不会覆盖 onSaveInstanceState
。AndroidManifest.xml
中被指定为 Activity B 的父级,同时使用 android:parentActivityName
属性和对应的 meta-data
标记(参见“Providing Up Navigation”)。已经没有任何相应的创建代码如getActionBar()
.setHomeButtonEnabled(true)
,activity B有一个正常工作的返回按钮(< strong><) 在其操作栏中。当点击此按钮时, Activity A 会重新出现,但 (a) 之前的所有实例状态都会丢失,(b) onCreate
总是被调用,并且 (c) savedInstanceState
总是 null
.
有趣的是,当我点击模拟器显示底部边缘提供的后退按钮(一个指向左侧的空心三角形)时, Activity A 会重新出现,就像它离开时一样(即它的实例状态完全保留)而不调用 onCreate
。那么导航可能有问题?
在 more reading 之后,我实现了自己的导航指令以响应在 Activity B 中点击后退按钮运行:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home)
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
与恢复 Activity A 的实例状态相关的任何内容均未更改。 NavUtils
还提供了一个方法 getParentActivityIntent(Activity)
和 navigateUpTo(Activity, Intent)
允许我们修改导航 Intent 以明确指示该 Activity A 不会通过设置 FLAG_ACTIVITY_CLEAR_TOP
标志重新开始(因此没有提供保存的实例状态):
If set, and the activity being launched is already running in the current task, then instead of launching a new instance of that activity, all of the other activities on top of it will be closed and this Intent will be delivered to the (now on top) old activity as a new Intent.
在我的手中,这解决了丢失实例状态的问题,可能看起来像:
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId()== android.R.id.home) {
Intent intent = NavUtils.getParentActivityIntent(this);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, intent);
return true;
}
return super.onOptionsItemSelected(item);
}
请注意,在用户可以从不同任务中直接切换到 Activity B 的其他情况下,这可能不是完整的解决方案(请参阅 here )。此外,不使用 NavUtils
的行为可能相同的解决方案是简单地调用 finish()
:
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId()== android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
两种解决方案都在我手中。我只是推测原始问题是后退按钮的默认实现稍有不正确,它可能与调用某种 navigateUp
的实现有关,该实现错过了 FLAG_ACTIVITY_CLEAR_TOP
.
关于android - savedInstanceState 始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6554317/
相当简单的问题,但我无法在任何地方找到明确的答案。 fragment 的savedInstanceState和 fragment 的父activity(或封装 fragment )的savedInst
我在获取 Activity 状态时遇到问题。我有 2 个 Activity :MainActivity 和 Activity2。在 MainActivity 中,我放了一个 editText 和一个
我想在与另一台设备“同步”时获取当前系统时间。因此,此 Activity 通常在同步后立即调用/显示。 目前,当前系统时间是正确的,但我还弹出另一个 Activity 的警报,一旦我完成该 Activ
在 Google Api 示例代码中,他们有一个关于保存状态的非常简单的示例。我需要这个来处理屏幕旋转。 我的问题是我不明白方法 getSavedText() 和 setSaveText() 是从哪里
我有一个秒表应用程序,它只有一项 Activity 。三个按钮启动、停止、重置和一个显示计时器的 TextView 。这是我的代码: public class StopwatchActivity ex
我有一个 ViewPager,其中包含用户输入不同输入的一些 fragment 。其中一个 fragment 包含一个 DatePicker 和一个 TimePicker ,我将其存储(当用户选择了日
如果我没有显式调用 onSaveInstanceState(),当 onCreate 中的 savedInstanceState 不为 null 时,这是可能的吗? 我看到一个选项,当系统在崩溃后重新
所以我的 OnsavedInstanceState 中有这段代码 @Override public void onSaveInstanceState(Bundle savedInstanceState
我正在制作一个 Android 应用程序,但我一直遇到一个奇怪的错误。游戏结束后,如果您点击手机上的“返回”按钮,您将回到完成的游戏并继续玩!! 如何防止这种情况发生?有没有办法删除之前的SavedI
我刚开始使用 Android,我遇到了以下问题: 我正在尝试在打开新 Activity 时保存 InstanceState,并且我需要在 Activity 返回可见状态时恢复该状态。 这是我的 onS
在我的主要 Activity 中有一些代码说 if (savedInstanceState != null) { mCurrentSelectedPosition = save
我是 Android 的新手,我在使用 savedInstanceState 和管理生命周期时遇到了一些麻烦。 http://developer.android.com/guide/topics/fu
我有以下情况: Activity A 启动 Activity B Activity A 调用 onPause、onSaveInstanceState 和 onStop 方法。 在 Activity B
据我了解,Activity 会自动保存 View 的状态,而 EditText 和 TextView 之类的东西会自动恢复它们的状态。 这不适用于可见性吗? 例如:如果默认情况下在 XML 中,我有一
我是 Android 开发的新手,但我对 OOP 概念有一些了解。我正在尝试从 Java 的角度学习 Android。 我了解到第9行onCreate()里面的savedInstanceState是B
因此,Activity.onCreate() 将一个Bundle 作为参数,默认情况下它被称为savedInstanceState。 savedInstanceState 是否在应用更新到较新版本时保
这是我保存的InstaceState 代码: @Override public void onSaveInstanceState(Bundle savedInstanceState) { sa
我在 ViewPager 中有一个 fragment 。 Fragment 包含一个 RecyclerView(想想 ListView)。当用户离开然后返回到 fragment 时,无论用户离开列表的
我只是想通过这个简单的例子来了解 Activity 的生命周期,方法是找出如何取回 SomeIntegers g_values 对象和其中的 ArrayList AnInteger 对象。 事实上,它
我正在使用 onSaveInstanceState 方法来存储和检索 fragment 内的局部变量。我的一个 fragment 中有以下代码(简化): private final SimpleDat
我是一名优秀的程序员,十分优秀!