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í:

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.

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.

  • ¿Cómo hacer una simple ventana emergente de Android?
  • Desactivación de ventana emergente de Android
  • ¿Cómo mostrar el PopupWindow siempre encima del botón (vista)?
  • PopupWindow sobre el teclado virtual
  • Cómo definir el diseño en un PopupWindow de un archivo xml, cuando el método PopupWindow se llama desde una clase independiente
  • Cómo mostrar un ListFragment existente en un DialogFragment
  • EditText en una ventana emergente
  • Cómo obtener información de una ventana emergente
  • Excepción de Spinner de Android al hacer clic en BadTokenException
  • Agregar programaticamente efecto de animación a un popupWindow (agregado por programa) en android
  • Popup (usando PopupWindow o Dialog) llena el ancho de la pantalla sin razón aparente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.