- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我已经看到一些类似的问题,关于 onSaveInstanceState
没有被 Fragment
调用,但在我的情况下 Fragment
工作正常,它是有问题的主要 FragmentActivity
。
相关代码看起来相当简单:
public class MyFActivity extends FragmentActivity implements ActionBar.TabListener {
String[] allValues; // data to save
@Override
protected void onSaveInstanceState (Bundle outState) {
Log.d("putting it!", allValues.toString());
outState.putStringArray("allValues", allValues);
super.onSaveInstanceState(outState);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
allValues = savedInstanceState.getStringArray("allValues");
Log.d("getting it!", allValues.toString());
}
}
}
暂停 Activity 时(使用后退按钮),永远不会调用 onSaveInstanceState
,因此,savedInstanceState
在恢复应用时的 onCreate
方法。我尝试添加这样的 block :
@Override
public void onPause() {
super.onPause();
onSaveInstanceState(new Bundle());
}
https://stackoverflow.com/a/14195202/362657 中建议的但是当 onSaveInstanceState
被调用时,savedInstanceState
在 onCreate
方法中仍然是 null
。我错过了什么?
最佳答案
这里的问题是您误解了 onSaveInstanceState
的工作原理。它旨在保存 Activity
/Fragment
的状态,以防操作系统因内存原因或配置更改而需要销毁它。当 Activity
/Fragment
返回/重新启动时,此状态会在 onCreate
中传回。
在 Fragment
中,它们的所有生命周期回调都直接绑定(bind)到它们的父 Activity
。因此,当父 Activity
调用了 onSaveInstanceState
时,onSaveInstanceState
会在 Fragment
上被调用。
When pausing the activity (using the back button), the onSaveInstanceState is never called, and consequently, savedInstanceState is always null within the onCreate method upon resuming the app.
当按下返回时,用户正在销毁 Activity
,因此它的子 Fragment
s,因此没有理由调用 onSaveInstanceState
,因为实例正在被销毁。当你重新打开Activity
时,它是一个全新的实例,没有保存状态,所以onCreate
中传入的Bundle
为null
。这完全符合设计。但是,尝试旋转设备或点击主页按钮,然后您将看到 Activity
及其子 Fragment
已调用 onSaveInstanceState
,并通过返回时返回onCreate
。
您添加的 hack,直接在 onPause
内调用 onSaveInstanceState(new Bundle());
是一种非常糟糕的做法,因为您应该切勿直接调用生命周期回调。这样做会使您的应用程序进入非法状态。
如果您真正想要的是让您的数据在您的应用程序实例之外持续存在,我建议您考虑使用 SharedPreferences
或 databases获取更高级的数据。然后,您可以将持久数据保存在 onPause()
中或在其更改时保存。
希望这会有所帮助。
关于android - FragmentActivity onSaveInstanceState 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15935322/
我遇到了一个无法用应用程序的抽屉导航解决的问题。抽屉导航中的链接之一是打开 FragmentActivity(其中包含 ViewPager)。其他链接是 fragment 。现在我已将其设置为启动该
除了使用 Intents 启动方法外,还有其他方法可以调用 FragmentActivity 中的方法吗?有人可以帮忙吗? 代码如下: class MainActiviy extends Ac
在我的应用程序中,它们不是 FragmentActivity.java,但崩溃报告给了我以下错误 Fatal Exception: android.content.ActivityNotFoundEx
我是 Java 和 Android 的初学者,我认为这更像是一个 Java 问题,因为它在 Android 中表现出来。 我正在使用 Android 支持包 (android.support.v4.a
我有两项 Activity : MainActivity,它扩展了 FragmentActivity 并具有 ViewActivity,它只是一个 Activity,以 MainActivity 作为
我对 FragmentActivity 类有疑问当我导入包时: import android.support.v4.app.FragmentActivity; 当我将其放入代码中时,导入 Fragme
今天我尝试创建一个带有 fragment Activity 的项目。我有一个 MainActivity 范围 FragmentActivity。 MainActvity 有布局。 activity_m
我在使用 FragmentActivity 和 SupportMapFragment 时遇到了一些问题。 map 的缩放比例很不稳定。这是代码: public class GoogleMapActiv
Activity 在导入 FragmentActivity 时显示错误。 import android.support.v4.app.FragmentActivity; import andr
我的代码中有一个具有 ListView 的 Activity ,我通过适配器类控制此 ListView 。每个 ListView 中都有一个 TextView,我想通过单击每个项目(TextView)
我正在尝试创建一个使用 fragment 的应用程序,但是当我尝试在 FragmentActivity 中显示一个 Fragment 时,操作栏没有出现。 fragment Activity 类: p
我可以使用下面的代码转换到 Fragment 类,但是如何使用相同的代码转换到 FragmentActivity。 FragmentActivity activity = new ABC(); //
您好,您可以在这里查看我的代码。我的问题是:使用这段代码,我的 EditText 和我的 Button 字段为空,所以我无法对它们执行任何操作。 请你帮我访问这个按钮。对于由 eclipse 自动生成
我尝试将 Android 兼容性库(或现在称为支持库)v4 用于 pre-honeycomb android 设备。我明白,我应该使用 FragmentActivity 类,而不是使用 Fragmen
我的主题不工作我已经看到了这个How do I change the background color of the ActionBar of an ActionBarActivity using X
您好,我正在尝试将 Intent 传递给 FragmentActivity,但它不起作用。 Activity 在 FragmentActivity 的初始化中关闭。这是 Activity : publ
在我的应用程序中,我有选项卡,但现在我需要添加 Sherlock Actionbar 我知道我需要使用 extends SherlockActivity 但早期我有 FragmentActivity
我正在尝试将 ActionBar 按钮添加到 FragmentActivity,但我无法弄清楚我做错了什么。运行应用程序时,我看到的只是 ActionBar 上的默认菜单按钮,而不是我的按钮。 fra
我正在扩展类中的 FragmentActivity,该类用作我的其他 Activity 的基础 Activity 。我的问题是当我从我的基本 Activity 扩展我的其他 Activity 时,我失
我正在使用 android 示例,FragmentTabs . 比如说,有 4 个选项卡(A、B、C、D)。我使用此代码将选项卡 fragment (A) 替换为另一个 (E) FragmentTra
我是一名优秀的程序员,十分优秀!