Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo obtener un fragmento en ViewPager?

¿Cómo obtener un fragmento en ViewPager?

Cómo obtener Fragment en ViewPager

Cuando trabajaba en un proyecto, encontré el problema de que Fragment y Fragment, Fragment y Activity necesitan comunicarse entre sí, transferir datos y realizar operaciones entre sí.

Lo revisé. El documento oficial implementa el ejemplo oficial, pero el proyecto real es ViewPager+Fragment. Según el ejemplo oficial

Sub siempre obtiene una referencia al Fragmento, como por ejemplo:

HeadLinesFragment headLinesFrag = (HeadLinesFragment )

getSupportFragmentManager ().findFragmentById(R.id. Headline_fragment

getSupportFragmentManager ().headline_fragment);

Esto se debe a que en ViewPager, el Fragmento se agrega dinámicamente al ViewPager. La identificación requerida es solo la identificación raíz del fragmento.

La identificación raíz del archivo local no es la identificación del archivo local. Fragmento, por lo que el Fragmento está vacío

Después de preguntar sobre información relevante, finalmente encontramos la siguiente solución:

En términos generales, podemos usar el visor para agregar dinámicamente Fragmento en el código.

No necesitamos especificar el

ID del fragmento, ni necesitamos especificar su etiqueta. Si se debe especificar una etiqueta, el tiempo de ejecución le indicará que se ha especificado la etiqueta. Entonces, después de agregar un fragmento en modo dinámico

, ¿cómo podemos acceder a ese fragmento y modificar su contenido? Hay dos métodos:

El primero es en realidad un método de hacker y no está respaldado por la documentación oficial. El código es el siguiente:

SomeFragment someFragment = getSupportFragmentManager().FindFragmentByTag("android:switcher:" + R. id.viewpager + ":0″);

if ( someFragment ! = null) //no se puede crear una instancia

{

if (someFragment.getView() != null)

{

someFragment .updateView();//Actualización de método personalizado

}

}

Lo que hay que recordar aquí es "android:switcher:" + R. id.viewpager + ":0" Este conmutador de caracteres representa la etiqueta del fragmento

, donde 0 es la posición del fragmento en el visor.

El segundo enfoque es más formal, ya que el primer enfoque funciona para implementaciones basadas en FragmentPagerAdapter pero no para

FragmentStatePagerAdapter.

Buscapersonas ViewPager = (ViewPager)findViewById(R.id.viewpager) )

FragmentStatePagerAdapter f = buscapersonas.

getAdapter();

SomeFragment someFragment = (SomeFragment)f.instantiateItem(pager, position);

El método InstantiateItem(pager, position) devuelve una referencia al fragmento en la posición. Si

el fragmento ya tiene una instancia y llamas a instantiateItem(pager,position) nuevamente, el método no llama a

getItem() para crear una instancia del fragmento nuevamente, sino que devuelve una referencia. Refresh();

DownloadSlidePagerAdapter:

clase pública DownloadSlidePagerAdapter extiende FragmentPagerAdapter {

Fragment[] fragmentos = {new DownloadListFragment(),new LocalVideoListFragment()};

Descarga públicaSlidePagerAdapter(FragmentManager fm) {

super(fm);

}

@Override

public Fragment getItem(int position) {

return fragments[position];

}

@Override

public int getCount() {

return fragments.length;

}

}

Obtener directamente el nuevo objeto de instancia de la aplicación