Hello, I'm facing this problem : I'm using Compatibility package to use fragment in android application (min SDK 2.1).
An random exception occurs on fragment sometimes and I can't figure out why. This is the stack trace I receive:
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)
Here is the corresponding code I'm calling in the Fragment class:
public class FeedListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor>, FeedListCursorAdapterListener { ... public void refreshUpdateDate() { getLoaderManager().restartLoader(LAST_UPDATE_CURSOR_ID, null, this); } ... }
Here is the code of the activity that calls the fragment:
private FeedListFragment mCursorLoaderListFg; if (!isFinishing()) { mCursorLoaderListFg.refreshUpdateDate(); mCursorLoaderListFg.refreshDisplay(); mCursorLoaderListFg.hideLoadingArticles(); }
Here is the fragment source code for getLoaderManager():
/** * 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; }
Here are the steps of the application before crash:
We tried two fixes:
Thanks for your help!!!
Do not hesitate to ask me more information if I'm not clear.
Add a fragment to an activity You can add your fragment to the activity's view hierarchy either by defining the fragment in your activity's layout file or by defining a fragment container in your activity's layout file and then programmatically adding the fragment from within your activity.
It can't exist independently. We can't create multi-screen UI without using fragment in an activity, After using multiple fragments in a single activity, we can create a multi-screen UI. Fragment cannot be used without an Activity.
onStop() — This method called when the fragment is no longer visible; the fragment will get change with other fragment or it gets removed from activity or fragment's activity called stop.
I had a similar problem.
Try using isAdded()
or isVisible()
instead of isDetached()
. Unfortunately, isDetached()
doesn't seem to work like it should...
What that worked for me was to use the Fragment listener of the fragment, add a getActivity function for it that returns the activity of the Fragment listener (the activity that created the fragment).
Now when i have a call that needed the activity i just use the function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With