studio - fragments android tutorial
Fragmento no se ha adjuntado todavĂa? (4)
A continuación se muestra mi código. Lo que estoy tratando de lograr es que estoy mostrando un marcador de vista dentro de mi vista Recycler. El visor interior muestra un fragmento y, al deslizar hacia la izquierda, muestro otro fragmento. Pero cuando ejecuto la aplicación. La aplicación está fallando. No sé a dónde me voy mal. Creo que es en algún lugar en el concepto de fragmento. Por favor ayúdame
@Override
public void onBindViewHolder(ManageCustomerViewHolder holder, int position)
{
holder.viewPager.setAdapter(new MyPageAdapter(fragmentManager, fragments));
}
private List<Fragment> getFragments()
{
List<Fragment> fList = new ArrayList<Fragment>();
fList.add(MyFragment.newInstance("Fragment 1"));
fList.add(Myfragment1.newInstance("Fragment 2"));
return fList;
}
public class ManageCustomerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
ViewPager viewPager;
viewPager = (ViewPager) itemView.findViewById(R.id.viewpager);
itemView.setOnClickListener(this);
}
Esto es lo que el error es:
java.lang.IllegalStateException: el fragmento aún no se ha adjuntado.
Actualice la revisión de la biblioteca de soporte a 27.0.2 para resolver el problema. Ver el changelog .
Estaba enfrentando el mismo problema en mi aplicación.
Traza de la pila:
java.lang.IllegalStateException: Fragment has not been attached yet. android.support.v4.app.Fragment.instantiateChildFragmentManager(Fragment.java:2154)
android.support.v4.app.Fragment.getChildFragmentManager(Fragment.java:704)
La aplicación se estaba estrellando en esta línea:
function performSomeActionInChildFragments() {
List<Fragment> fragments = getChildFragmentManager().getFragments();
...
}
Esto sucede cuando el fragmento ya no está adjunto a su actividad / fragmento principal. Por lo tanto, una simple comprobación isAdded()
debería resolver este problema por usted.
Fijar:
function performSomeActionInChildFragments() {
if (!isAdded()) return;
List<Fragment> fragments = getChildFragmentManager().getFragments();
...
}
De la documentation :
isAdded (): devuelve true si el fragmento se agrega actualmente a su actividad.
Me enfrenté a esta excepción hoy. Después de buscar una respuesta, noté que todos están relacionados con ViewPager y getFragmentManger () o en mi caso getChildFragmentManager ().
Bueno, a veces esto sucede cuando no hay ningún fragmento, por lo que no se puede adjuntar ni mostrar nada. Por lo tanto, cuando se creó mi fragmento, ahora guardo en una variable el administrador de fragmentos, luego uso ese administrador en mi instancia de Viewpager para que siempre haya un administrador guardado en la clase. Para aclarar lo que estoy diciendo aquí está mi código:
antes de
ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
adapter.addFragment(tabLlegadaFragment, "Llegada");
adapter.addFragment(tabIngresoFragment, "Ingreso");
viewPager.setAdapter(adapter);
Aquí enfrenté el error porque recreé la vista con algún método y también presioné el botón Atrás. Entonces, cuando eso sucedió, Android está buscando un GetChildFragmentManager () de un Fragmento que ya no existe o se ha ido (porque presioné el botón Atrás)
Ahora
FragmentManager childFragMang;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_tab_main, container, false);
..
childFragMang= getChildFragmentManager();
..
return view;
}
y cuando llamo a Viewpager uso ese administrador
ViewPagerAdapter adapter = new ViewPagerAdapter(childFragMang);
adapter.addFragment(tabLlegadaFragment, "Llegada");
adapter.addFragment(tabIngresoFragment, "Ingreso");
viewPager.setAdapter(adapter);
No enfrenté esa excepción de nuevo, así que fue porque mi fragmento desapareció cuando presioné hacia atrás y no había getChildFragmentManager () para llamar
No deberías estar intentando crear instancias de Fragmentos. Los fragmentos se crean y tienen ciclos de vida que son controlados por el sistema Android. Responde a los eventos del ciclo de vida anulando los métodos de devolución de llamada como onAttached
(llamado cuando el fragmento se adjunta a su Activity
)