Same. Although it is an old thread, I encounter the same issue, too. I find the thread http://stackoverflow.com/questions/11001475/listfragment-is-inflated-twice. It says put initLoader in onCreate() according to Fragment lifecycle ( http://developer.android.com/guide/topics/fundamentals/fragments.html#Creating). I tried it. It works. Nonetheless, I am not sure if it is a correct way to solve the issue.
Ben於 2012年11月23日星期五UTC+8下午10時41分32秒寫道: > Same > > On Wednesday, June 27, 2012 4:53:47 PM UTC+3, szakalinhoPL wrote: >> >> Hello, >> I noticed a strange situation when using Loader in Fragment (in Activity >> works well). I init Loader in onActivityCreated() as suggested in >> documentation (http://developer.android.com/guide/components/loaders.html) >> and after orientation change framework calls twice >> method LoaderCallbacks.OnLoadFinished but not in initLoader (probably >> beacause Fragment is not in started state, but in docs there is information >> that I should be prepared for this >> (http://developer.android.com/reference/android/app/LoaderManager.html#initLoader(int, >> >> android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>) but it >> never happens) . However if I call iniLoader in Fragment.onResume() >> everything works as expected. The same issue is described here >> https://groups.google.com/forum/?fromgroups#!topic/android-developers/aA2vHYxSskU. >> >> It happens using support library as well. Anyone noticed this situation? I >> wrote very simple application to test this issue, here is sample code: >> >> >> //Activity class >> >> package com.example; >> >> import android.app.Activity; >> import android.app.LoaderManager; >> import android.os.Bundle; >> >> public class MyActivity extends Activity >> { >> /** >> * Called when the activity is first created. >> */ >> @Override >> public void onCreate(Bundle savedInstanceState) >> { >> super.onCreate(savedInstanceState); >> setContentView(R.layout.main); >> >> LoaderManager.enableDebugLogging(true); >> if (savedInstanceState == null) >> { >> getFragmentManager().beginTransaction().add(R.id.container, >> new TestFrag(), "asdf").commit(); >> } >> } >> } >> //Fragment class >> >> package com.example; >> >> import android.app.Fragment; >> import android.app.LoaderManager; >> import android.content.Loader; >> import android.os.Bundle; >> import android.util.Log; >> >> public class TestFrag extends Fragment >> { >> @Override >> public void onActivityCreated(Bundle savedInstanceState) >> { >> super.onActivityCreated(savedInstanceState); >> LoaderManager.LoaderCallbacks c = new >> LoaderManager.LoaderCallbacks() >> { >> @Override >> public Loader onCreateLoader(int id, Bundle args) >> { >> return new Loader<Object>(getActivity()) >> { >> @Override >> protected void onStartLoading() >> { >> Log.d("TAG", "onStartLoading " + this); >> deliverResult(new Object()); >> } >> }; >> } >> >> @Override >> public void onLoadFinished(Loader loader, Object data) >> { >> //THIS IS CALLED TWICE >> Log.d("TAG", "onLoadFinished " + data); >> } >> >> @Override >> public void onLoaderReset(Loader loader) >> { >> } >> }; >> getLoaderManager().initLoader(100, null, c); >> >> } >> >> } >> >> -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en --- You received this message because you are subscribed to the Google Groups "Android Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.

