java - 如何在 App Resume 或 Re-load Object 中通过 Activity 实例化 Fragment?

标签 java android android-fragments android-activity

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

我有一个对象,我称之为 Category,我的 fragment (CategoryFragment [extending ListFragment])需要访问它才能用内容填充 ListView。

通常情况下,这工作正常。应用启动,创建类别,并显示列表(因为我在 ViewPager 中有几个这样的列表)。

但是,在按下 Home 并稍作停留后,重新进入应用程序会导致崩溃。在我创建带有参数的构造函数之前,它会向我提供该类别的 NullPointerException。从那时起,我决定给它一个带有类别对象的构造函数,但现在它以这种方式失败了。

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

  1. 如何通过我的 Activity 强制实例化 fragment ?
  2. 如何让 Android 保留我的对象?我假设它需要可序列化,但如何在再次创建 Fragment 时保持它可用?

此 Activity 的 list 数据如下:

<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>

最佳答案

This link in the docs about saving activity state应该有用。 fragment 也像 Activity 一样具有 onSave/RestoreInstanceState() 函数。您需要确定您的类别对象属于哪个类(Activity 或 Fragment),并通过 onSave/RestoreInstanceState() 中传递给您的 Bundle 保存和恢复您的类别数据 该类的函数。

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

关于java - 如何在 App Resume 或 Re-load Object 中通过 Activity 实例化 Fragment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9006684/

相关文章:

java - 使用 java.io 对 native java 数组进行高效序列化

java - 如何替换字符串中的 XML 标签? (还要检查它是否以 xml 标签开头)

android - 你如何知道 Linux 中是否已经存在互斥对象?

android - 在 Fragment Kotlin 中调用 DialogFragment

java - HashMap 卡在了 put 上

java - 两个迭代器抛出 ConcurrentModificationException

android - Android录音问题

Android - 关闭屏幕而不进入待机模式

android - 仅在我的 viewpager 的第一页中显示进度条

android - 设置 Cardview 形状和背景半透明