如何通过应用程序上的活动实例化片段恢复或重新加载对象到内存?

时间:2012-01-25 16:58:15

标签: java android android-fragments android-activity

Java异常:http://hastebin.com/yiwecefifi.avrasm

我有一个对象,我称之为Category,我的片段(一个CategoryFragment [扩展ListFragment])需要有权访问,以便用内容填充ListView。

通常,这很好用。应用程序启动,创建类别,列表显示(因为我在ViewPager中有几个)。

然而,在按住Home并稍微离开之后,重新进入应用程序将导致崩溃。在我使用参数创建构造函数之前,它会给我一个类别的NullPointerException。从那以后,我决定给它一个带有类别对象的构造函数,现在它以这种方式失败了。

那么,我的问题是两件事之一:

  1. 如何通过我的活动强制片段实例化?
  2. 如何让Android保留我的对象?我认为它需要是可序列化的,但是如何在再次创建Fragment时保持它可用?
  3. 此活动的清单数据如下:

    <activity
        android:launchMode="singleInstance"
        android:name=".NewsActivity"
        android:configChanges="orientation|keyboardHidden|screenSize|screenLayout|uiMode"
        android:label="@string/shortcut_name"
        android:theme="@style/Theme.BgsuNews" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    

1 个答案:

答案 0 :(得分:1)

This link in the docs about saving activity state应该有用。片段还具有活动等onSave/RestoreInstanceState()功能。您需要确定Category对象所属的类(Activity或Fragment),并通过在该类的Bundle函数中传递给您的onSave/RestoreInstanceState()来保存和恢复Category数据。 / p>

另一种存储正在进行的工作的方法是this approach,这可能对您的情况有用,也可能没用。 (这就是我尽可能做的事情,onSaveInstanceState()适用于其他一切。)