android 兼容性包 - fragment ...未附加到 Activity

标签 android android-fragments android-loadermanager


你好, 我面临这个问题: 我正在使用兼容性包在 android 应用程序中使用 fragment (最小 SDK 2.1)。

fragment 上有时会发生随机异常,我不知道为什么。 这是我收到的堆栈跟踪:

java.lang.IllegalStateException: Fragment FeedListFragment{438a54e8} not attached to Activity
    at android.support.v4.app.Fragment.getLoaderManager(Fragment.java:715)
    at com.myappli.ui.FeedListFragment.refreshUpdateDate(FeedListFragment.java:283)
    at com.myappli.ui.phone.FeedListActivity.onReceiveResult(FeedListActivity.java:277)
    at com.myappli.data.rssplayer.service.KTDetachableResultReceiver.onReceiveResult(KTDetachableResultReceiver.java:55)
    at android.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:43)
    at android.os.Handler.handleCallback(Handler.java:587)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:4425)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    at dalvik.system.NativeStart.main(Native Method)

这是我在 Fragment 类中调用的相应代码:

public class FeedListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor>, FeedListCursorAdapterListener {

...
    public void refreshUpdateDate() {
    getLoaderManager().restartLoader(LAST_UPDATE_CURSOR_ID, null, this);
    }
...
}

这里是调用 fragment 的activity的代码:

private FeedListFragment mCursorLoaderListFg;

if (!isFinishing()) {
    mCursorLoaderListFg.refreshUpdateDate();
    mCursorLoaderListFg.refreshDisplay();
    mCursorLoaderListFg.hideLoadingArticles();
}

这里是getLoaderManager()的 fragment 源代码:

/**
* Return the LoaderManager for this fragment, creating it if needed.
*/
public LoaderManager getLoaderManager() {
    if (mLoaderManager != null) {
        return mLoaderManager;
    }
    if (mActivity == null) {
        throw new IllegalStateException("Fragment " + this + " not attached to Activity");
    }
    mCheckedForLoaderManager = true;
    mLoaderManager = mActivity.getLoaderManager(mIndex, mLoadersStarted, true);
    return mLoaderManager;
}

以下是应用程序崩溃前的步骤:

  1. Activity 在后台调用方法。
  2. 在 Activity 上调用回调方法
  3. 在这个回调方法中,activity调用了fragment
  4. fragment 尝试启动一些需要 Activity 的方法(如 getLoadManager())。
  5. fragment 不再附加到 Activity => 崩溃

我们尝试了两个修复:

  • 测试 Activity 以检查 Activity 是否完成(如上面的代码)
  • 使用方法 isDetached 对 fragment 进行测试。

感谢您的帮助!!!

如果我不清楚,请随时向我询问更多信息。

最佳答案

我遇到了类似的问题。

尝试使用 isAdded()isVisible() 代替 isDetached()。不幸的是,isDetached() 似乎无法正常工作......

关于android 兼容性包 - fragment ...未附加到 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6870325/

相关文章:

android - 我在哪里可以看到 Android Studio 中一个类的所有方法?

android - 如何制作从 ViewPager 到另一个 Fragment 的共享过渡动画?

java - Android LoaderManager 和 CursorLoader 混淆

android - 何时在 View 上使用 fragment ?

android - ViewPager 停止 Fragment 之间的翻转动画

android - getSupportLoaderManager() 在不同 fragment 中使用相同的 ID?

android - 将 Android 工具栏弹出菜单主题从深色更改为浅色

java - 使用微调器更改 TextSize

android - 如何删除运行时生成的文件 "ant release"

android - 如何创建包含 fragment 的 Android 选项卡式对话框?