I have a fragment, and want to start a loader when a button is clicked:
public class MyFragment extends Fragment {
public void onActivityCreated() {
super.onActivityCreated();
Button btn = ...;
btn.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
getLoaderManager().initLoader(500, null, mMyCallback);
}
});
}
private LoaderManager.LoaderCallbacks<String> mMyCallback = new LoaderManager.LoaderCallbacks<String>() {
@Override
public Loader<String> onCreateLoader(int arg0, Bundle arg1) {
Log.e(TAG, "LoaderCallback.onCreateLoader().");
return new MyLoader(getActivity());
}
}
}
public class MyLoader extends AsyncTaskLoader<String> {
public MyLoader(Context context) {
super(context);
}
@Override
public String loadInBackground() {
Log.e(TAG, "Hi, running.");
return "terrific.";
}
}
After clicking the button, I can see my callback's onCreateLoader method called, but the created loader never actually starts. Do we need to call forceLoad() on the loader itself to get it to actually start? None of the sample posts do this,
Thanks
You need to implement onStartLoading()
and call forceLoad()
somewhere in the method.
See this post for more information: Implementing Loaders (part 3)
In my experience it never worked unless I used forceLoad()
.
You may find the answer to this previous question helpful: Loaders in Android Honeycomb
Three important points regarding Loaders are:
Always Use forceLoad()
method while initialising Loaders. For Example:
getLoaderManager().initLoader(500, null, mMyCallback).forceLoad();
Always implement onStartLoading()
. This function will automatically be called by LoaderManager
when the associated fragment/activity is being started.
Make sure the ID of the loader is unique otherwise new Loader will not be called.
If there is still a problem you can check the state of loader by calling the isStarted()
method.
You need to keep a reference to the instance of the loader you create in the method onCreateLoader
. Then, to refresh it, call yourLoader.onContentChanged();
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