Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OnLoadFinished() called twice

Tags:

I'm trying to figure out if I'm doing something wrong with respect to Loaders. I'm using the support library, and I have a Fragment which in onCreate() calls initLoader() setting itself as the LoaderCallbacks, however on a rotation it is receiving the result twice in onLoadFinished(), once as a result of calling init (and it already having the data), and once as a result of FragmentActivity looping through all Loaders in onStart() and delivering the result since it already has the data.

If I only call init once (on first launch of the Fragment), it doesn't set itself as the callback for the Loader so it doesn't receive a call to onLoadFinished at all. It seems as though onLoadFinished should only be called once since some expensive things may be done in onLoadFinished() (such as clearing list adapters, etc.), so I'm just trying to figure out if this is a bug or if I am just calling init at the wrong time or something else.

Anyone have any insight to this issue?

like image 634
Matt Kranzler Avatar asked Feb 06 '13 00:02

Matt Kranzler


1 Answers

I had a similar problem and the cause was that I had initLoader and restartLoader in my code. Depending on user's action, my query could change, so I needed to restart my loader.

The solution was to use only restartLoader, even in onResume callback method replace initLoader with restartLoader.

like image 159
Mussa Avatar answered Sep 19 '22 12:09

Mussa