android - site - Obtener la identificación de la vista del contenedor del fragmento
qué es el fragmento del contenedor en google tag manager (4)
Creo que hay una forma más estándar de acceder a la vista en lugar de usar
((ViewGroup) getView().getParent()).getId()
Asumiré que está trabajando con una actividad principal que presenta un fragmento de lista, que luego puede presentar otro fragmento de lista al hacer clic en un elemento, y así sucesivamente. Supongo que ha elegido reemplazar la vista principal de MainActivity por el contenido de los fragmentos de lista que presenta.
Debido a que cada fragmento de lista se aloja en MainActivity, siempre puede acceder a la vista de MainActivity.
// Inside of onListItemClick...
FragmentManager fm = getFragmentManager();
Fragment fragment = new MyOtherListFragment();
FrameLayout contentView = (FrameLayout) getActivity().findViewById(R.id.content_view);
fm.beginTransaction()
.replace(contentView.getId(), fragment)
.addToBackStack(null)
.commit();
El ejemplo anterior supone que tiene un recurso de diseño XML que estableció en MainActivity, llame al recurso XML R.layout.activity_main, donde hay un FrameLayout con la identificación R.id.content_view. Este es el enfoque que tomé. El ejemplo que presento aquí es una versión más simple de la que realmente escribí en mi aplicación.
A propósito, mi versión de IntelliJ (versión 1.0.1) me advierte que
((ViewGroup) getView().getParent)
puede arrojar una NullPointerException.
Tengo un fragmento agregado usando
transaction.add(R.id.content, fragment, null);
y necesito comenzar un nuevo fragmento a partir de este. Pero para hacer esto necesito saber el ID de la vista del contenedor del primer fragmento (R.id.content en mi caso). ¿Cómo puedo conseguir esto?
Solo puedo usar esta identificación directamente, pero supongo que el fragmento no debería conocer ese tipo de detalles sobre la actividad de los padres. Por ejemplo, será imposible usar este fragmento en otra actividad en este caso.
¿Puede ser que el fragmento de "inicio" de otro sea una mala práctica y toda la lógica de manejo de fragmentos debe ser manejada por la actividad misma? Pero crear secuencias agradables de fragmentos comenzando entre sí parece bastante útil (por ejemplo, detalView-> moreDetailView-> evenMoreDetailView).
No sé si entiendo exactamente tu pregunta, pero obtienes el contenedor en onCreateView. Supongo que podrías esconderlo en una variable local.
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
mContainer = container;
...
}
Puede acceder al ID del contenedor llamando
((ViewGroup)getView().getParent()).getId();
Suponiendo que tiene Fragment instance mCurrentFragment
en la clase Activity. Puedes obtener la vista del contenedor de Fragment a través de
int id = mCurrentFragment.getView().getParent().getId();
ViewGroup vg = (ViewGroup) findViewById(id); // Fragment''s container View