首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓兼容性软件包-片段..。不附属于活动

安卓兼容性软件包-片段..。不附属于活动
EN

Stack Overflow用户
提问于 2011-07-29 08:10:11
回答 4查看 25.7K关注 0票数 22

你好,我面临着这个问题:我正在使用兼容包在android应用程序中使用片段(minSDK2.1)。

有时候碎片上会出现随机异常,我不知道原因。这是我收到的堆栈跟踪:

代码语言:javascript
复制
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)

下面是我在片段类中调用的相应代码:

代码语言:javascript
复制
public class FeedListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor>, FeedListCursorAdapterListener {

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

下面是调用片段的活动代码:

代码语言:javascript
复制
private FeedListFragment mCursorLoaderListFg;

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

以下是getLoaderManager()的片段源代码:

代码语言:javascript
复制
/**
* 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. 该活动在后台调用方法。
  2. 对活动调用回调方法。
  3. 在此回调方法中,活动调用片段。
  4. 该片段试图启动一些需要活动的方法(如getLoadManager())。
  5. 该片段不再附加到活动=>崩溃中。

我们尝试了两个解决方案:

  • 测试活动,以检查活动是否已完成(如上面的代码)
  • 用isDetached方法对片段进行测试。

谢谢你的帮助!

如果我不清楚的话,不要犹豫问我更多的信息。

EN

回答 4

Stack Overflow用户

发布于 2011-08-23 18:53:58

我也有过类似的问题。

尝试使用isAdded()isVisible()而不是isDetached()。不幸的是,isDetached()似乎不像它应该做的那样.

票数 27
EN

Stack Overflow用户

发布于 2012-12-11 10:22:12

对我来说起作用的是使用片段的片段侦听器,为它添加一个getActivity函数,返回片段侦听器的活动(创建片段的活动)。

现在,当我有一个需要活动的调用时,我只需要使用这个函数。

票数 1
EN

Stack Overflow用户

发布于 2012-03-12 16:35:46

我通过将内部适配器类更改为静态内部类来解决此问题。

代码语言:javascript
复制
private static class MessagesAdapter extends CursorAdapter {
...

我不知道该如何解释,但这与我们应该避免使用推荐的这里中的非静态内部类有关

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6870325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档