Crear correctamente un fragmento en un PopupWindow
Soy nuevo en el desarrollo de Android y estoy confundido acerca de cómo lograr lo que estoy tratando de hacer. He hecho algo de lectura y aprendizaje sobre fragmentos para poder compartir diseño y código entre varios diseños de tamaño de pantalla. Tengo un par de fragmentos creados y los he utilizado con éxito. Pero tengo una situación donde quiero mostrar un fragmento en una actividad normal en el teléfono, pero quiero mostrar el fragmento en un PopupWindow (o algo similar si hay una mejor opción) en una tableta.
He conseguido averiguar cómo inflar el fragmento y mostrarlo en un PopupWindow cuando se hace clic en un botón. Mi código se ve así:
- PopupWindow en una coordenada específica sin vista de anclaje
- Creación de un fragmento en una ventana emergente - en Android
- Cómo establecer el ancho de la ListView en un PopupWindow en Android?
- Android - PopupWindow sobre una vista específica
- Orden de PopupWindow z
public void onClick(View v) { LayoutInflater inflater = (LayoutInflater) BrowsingActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View popupLayout = inflater.inflate(R.layout.serverconnection_fragment, null, false); connectionListPopup = new PopupWindow(popupLayout, 300, 470, true); connectionListPopup.showAtLocation(BrowsingActivity.this.findViewById(R.id.connectionListImage), Gravity.CENTER, 0, 0); }
La ventana emergente aparece y contiene la interfaz de usuario descrita en serverconnection_fragment.xml. El problema es que al crearlo de esta manera, la clase Fragment ServerConnectionFragment.java nunca se instancia de modo que no hay elementos en la lista en mi interfaz de usuario, no hay oyentes en los botones y así sucesivamente. Parece que debería haber una forma de instanciar la clase java, hacer que infle el fragmento normalmente y adjuntar a los oyentes de eventos, luego pasar la vista creada allí en el constructor de PopupWindow, pero no puedo averiguar cómo. ¿Puede alguien ayudarme?
FYI, estoy construyendo esto para Android 2.1 usando el archivo Android-support-v4.jar para las clases Fragment.
- Cambiar el color de fondo cuando se muestra una ventana emergente
- Android: ¿Cómo arrastrar (mover) PopupWindow?
- PopupWindow - no funciona en algunos dispositivos
- Error de hilandero en la ventana emergente cuando hago clic
- Ventana emergente de Android descarta al hacer clic fuera
- No se puede interactuar con PopupWindow y Background (GoogleMap)
- ListPopupWindow: getWindowVisibleDisplayFrame (Rect) null excepción
- PopupWindow de Android / Diálogo
Inflar el diseño directamente no le hará instanciar el fragmento; Android solo consideraría una mera coincidencia que tanto el fragmento como la actividad están tratando de referirse al mismo archivo de diseño.
Normalmente, se utiliza FragmentManager.add (int, Fragmento) para agregar un fragmento a un diseño. Sin embargo, el identificador de contenedor que especifique debe formar parte del diseño de la actividad actual, y esto no es el caso con una PopupWindow
. En su lugar, tendría que agregar el fragmento al gestor de fragmentos sin especificar un contenedor, y luego algún tiempo después en el fragmento (por ejemplo, onStart()
) puede mostrar un PopupWindow. Esto es exactamente cómo funciona DialogFragment
, y ya hay un montón de apoyo para él, le sugiero que cambie a utilizar un DialogFragment en su lugar.
Con su código de fragmento, simplemente extienda DialogFragment en lugar de Fragment y use DialogFragment.show (FragmentManager, String) para mostrarlo. Puede deshacerse del borde predeterminado llamando a setStyle(DialogFragment.STYLE_NO_FRAME, getTheme())
en el método onCreate
. Todavía puedes añadir este fragmento a un diseño (como dices, en un teléfono que no quieres que se muestre como un popup) y funcionará como esperas.
- ¿Cuál es la forma correcta de anular el registro de las devoluciones de llamada del ciclo de vida de la actividad?
- Abrir PDF en la aplicación Android