onResume () no se llama en el fragmento de ViewPager cuando se usa un cargador personalizado

Version corta:

Tengo un fragmento que mantiene unViewPager para mostrar otros dos fragmentos, llamémoslosFragmentOne yFragmentTwo. Al iniciar la aplicaciónFragmentOne es visible yFragmentTwo está fuera de la pantalla, haciéndose visible solo cuando se desliza la vista hacia la izquierda.

NormalmenteonStart() yonResume() invocarse inmediatamente para ambos fragmentos tan pronto como se inicie la aplicación.

El problema que tengo es cuandoFragmentOne comienza una costumbreLoader entoncesonResume() no es llamado enFragmentTwo Hasta que sea completamente visible.

Preguntas:

¿Es este un problema con mi código o un error en la biblioteca de soporte de Android? (El problema no se produjo con la revisión 12 de la biblioteca, comenzó con la revisión 13).

Si es un error en las revisiones 13 y 18, ¿hay alguna solución?

¿Hay algo malo con mi costumbre?Loader?

Versión larga:

He construido una aplicación de ejemplo que demuestra el problema. He intentado reducir el código al mínimo, pero aún así es mucho, así que por favor, tengan paciencia conmigo.

tengo unMainActivity que carga unMainFragment que crea unViewPager. Es importante para mi aplicación que ViewPager sea mantenido por un Fragmento en lugar de una Actividad.

MainFragment crea unFragmentPagerAdapter que a su vez crea los fragmentosFragmentOne yFragmentTwo.

Empecemos con lo interesante, los dos fragmentos:

FragmentOne es unListFragment que usa una costumbreLoader para cargar el contenido:

public class FragmentOne extends ListFragment implements LoaderCallbacks<List<String>> {
    private ArrayAdapter<String> adapter;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1);
        setListAdapter(adapter);

        setEmptyText("Empty");
    }

    @Override
    public void onResume() {
        super.onResume();

        // initializing the loader seems to cause the problem!
        getLoaderManager().initLoader(0, null, this);
    }

    @Override
    public Loader<List<String>> onCreateLoader(int id, Bundle args) {
        return new MyLoader(getActivity());
    }

    @Override
    public void onLoadFinished(Loader<List<String>> loader, List<String> data) {
        adapter.clear();
        adapter.addAll(data);
    }

    @Override
    public void onLoaderReset(Loader<List<String>> loader) {
        adapter.clear();
    }

    public static class MyLoader extends AsyncTaskLoader<List<String>> {
        public MyLoader(Context context) {
            super(context);
        }

        @Override
        protected void onStartLoading() {
            forceLoad();
        }

        @Override
        public List<String> loadInBackground() {
            return Arrays.asList("- - - - - - - - - - - - - - - - - - - foo",
                    "- - - - - - - - - - - - - - - - - - - bar",
                    "- - - - - - - - - - - - - - - - - - - baz");
        }
    }
}

Eso esLoader Eso parece causar el problema. Comentando elinitLoader La línea hace que el fragmento del ciclo de vida funcione como se espera nuevamente.

FragmentTwo cambia su contenido basado en sionResume() ha sido invocado o no:

public class FragmentTwo extends Fragment {
    private TextView text;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        text = new TextView(container.getContext());
        text.setText("onCreateView() called");
        return text;
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.i("Fragment2", "onResume() called");
        text.setText("onResume() called");
    }
}

Y aquí está el resto aburrido del código.

MainActivity:

public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        Fragment fragment = new MainFragment();
        getSupportFragmentManager().beginTransaction().add(R.id.container, fragment).commit();
    }
}

Diseñoactivity_main:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

MainFragment:

public class MainFragment extends Fragment {
    private ViewPager viewPager;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View layout = inflater.inflate(R.layout.frag_master, container, false);
        viewPager = (ViewPager) layout.findViewById(R.id.view_pager);
        return layout;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        viewPager.setAdapter(new MyPagerAdapter(getChildFragmentManager()));
    }

    private static final class MyPagerAdapter extends FragmentPagerAdapter {
        public MyPagerAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);
        }

        @Override
        public int getCount() {
            return 2;
        }

        @Override
        public Fragment getItem(int position) {
            if (position == 0)
                return new FragmentOne();
            else
                return new FragmentTwo();
        }
    }
}

Diseñofrag_master:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Respuestas a la pregunta(2)

Su respuesta a la pregunta