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