找不到符号方法setRetainInstance(boolean)

时间:2015-04-08 19:14:54

标签: android

我想在onCreate方法中将setRetainInstance(true)方法添加到我的应用程序中,但它不起作用。 Android Studio告诉我它无法解析方法setRetainInstance。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setRetainInstance(true);

    setContentView(R.layout.activity_main);
    mNavigationDrawerFragment = (NavigationDrawerFragment)
            getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
    mTitle = getTitle();

    // Set up the drawer.
    mNavigationDrawerFragment.setUp(
            R.id.navigation_drawer,
            (DrawerLayout) findViewById(R.id.drawer_layout));
}
  

错误:(47,9)错误:找不到符号方法setRetainInstance(boolean)

2 个答案:

答案 0 :(得分:1)

这是一个Fragment类方法,而不是来自Activity,请参见此处:

http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)

[编辑]

回答您的其他信息:

  

尝试解释它:我在Android studio中创建了一个标准的导航抽屉活动并开始编程。如果我更改了应用的方向,则应用会崩溃,因为它不会重建我在activity_main.xml中设置的元素。

有很多方法可以解决这个问题:

  1. 序列化您的对象,即。使它成为可分辨的:How can I make my custom objects Parcelable?。然后在Activity.onSaveInstanceState / onCreate中保留/恢复它。
  2. 将您的对象放入保留的片段实例:示例: Retaining an Object During a Configuration Change
  3. 使用onRetainNonConfigurationInstance(现已弃用)保持对象在Activity配置更改之间。
  4. 您可以通过将android:configChanges添加到您的活动清单中来找到一个快速解决方案,但那是糟糕的设计,有关详细信息,请查看此处:Why not use always android:configChanges="keyboardHidden|orientation"?
  5. 实际上最好的方法是从配置更改重建对象的能力开始。 Android可以破坏你的应用程序(当它在后台时),杀死你的活动对象,然后当用户想要将它移动到前台时你无论如何都必须重新创建你的对象。

答案 1 :(得分:0)

正如@marcinj所说,这是一种Fragment方法。 尝试解释您想要达到的目标,以便我们为您提供更完整的答案。

如果您已经有一个片段,则需要从那里调用setRetainInstance方法。如果您没有,但仍需要因某种原因更改retainInstance属性,请创建一个: http://developer.android.com/training/basics/fragments/creating.html