Utilizar FragmentTransaction con un DialogFragment
Así que he creado un DialogFragment que se muestra como un diálogo a través de esta técnica
Ahora que se ha iniciado y en una interacción de usuario dentro de este popup quiero deslizar en otro fragmento a este diálogo. Estoy tratando de hacer esto a través de FragmentTransaction.add () donde le doy el id de uno de los contenedores en este diseño. En este punto obtengo:
- Android Honeycomb: Fragmento no puede iniciar AsyncTask?
- GetActionBar de Fragment con AppCompatLibrary
- Obtención de la instancia Fragment actual en el viewpager
- Detener el controlador después de que se haya destruido el fragmento
- ¿Por qué el teclado virtual de Android no responde a EditText?
java.lang.IllegalArgumentException: No view found for id 0x7f09013f for fragment <fragmentClassThatIWasPushingIn>
Como una prueba rápida, traté de empujar a un identificador de contenedores no en el diálogo, pero dentro de la actividad de respaldo principal y que funcionó bien.
¿Hay algo sobre DialogFragments y sus identificadores de contenedor que no permiten FragmentTransactions?
Como un stopgap he dicho a mi transacción para ocultar el DialogFragment actual y mostrar este nuevo fragmento, pero la animación / pantalla es un poco chocante por lo que realmente me gustaría resolver este problema.
Gracias
- ¿Hay algún punto de una actividad con un fragmento?
- Java.lang.IllegalStateException: RecyclerView no tiene LayoutManager en Fragmento
- Cómo agregar un objeto de encabezado y preferencia a PreferenceActivity no utilizar un archivo XML, pero Java?
- El paquete de compatibilidad de Android no incluye Activity.getFragmentManager ()
- Guardar estado de fragmentos en backstack
- Barra de progreso Android DialogFragment
- Animación de volteo de Android entre fragmentos con el archivo jar de v4 admitido
- Cómo ejecutar pruebas en un fragmento de actividades
Cuando un DialogFragment
se muestra como un DialogFragment
Dialog
no es realmente un Fragment
real en una vista de contenedor. Es un Fragment
contenedores que es básicamente una envoltura de un Dialog
.
Así que no, no se puede mostrar un Fragment
dentro de un FragmentDialog
. Si realmente quieres hacer esto, creo que la mejor manera de crear una nueva Activity
estilo como un Dialog
que puede agregar Fragments
también.
DialogFragment
tiene razón de que DialogFragment
actúa como un diálogo, sin embargo se puede hacer que actúe como un fragmento con setShowsDialog(false);
Al final, lo siguiente funcionó para mí:
Archivo: res / layout / wifidirect_dialog_wifidirect:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:id="@+id/dialog_wifidirect_layout"> <LinearLayout android:id="@+id/frag_container" android:layout_width="match_parent" android:layout_height="250dp" android:orientation="vertical" > <!-- This is replaced during runtime --> <RelativeLayout android:id="@+id/frag_list" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="top" > </RelativeLayout> </LinearLayout> <!-- The Cancel Button --> <View android:layout_width="fill_parent" android:layout_height="1dp" android:layout_marginBottom="0dp" android:background="?android:attr/dividerVertical" /> <Button android:id="@+id/dialog_wifidirect_cancel" style="?android:attr/buttonBarButtonStyle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/cancel"/> </LinearLayout>
Archivo src /…/ WifiDirectDialog.java:
public class WiFiDirectDialog extends DialogFragment { public static final String TAG = "WifiDirectDialog"; public static final String DEVICE_LIST_FRAGMENT_TAG = "WIFIDIRECT_DEVICE_LIST_FRAGMENT"; public static WiFiDirectDialog newInstance(){ WiFiDirectDialog wDialog = new WiFiDirectDialog(); //We want this Dialog to be a Fragment in fact, //otherwise there are problems with showing another fragment, the DeviceListFragment wDialog.setShowsDialog(false); //wDialog.setStyle(SherlockDialogFragment.STYLE_NORMAL,android.R.style.Theme_Holo_Light_Dialog); //We don't want to recreate the instance every time user rotates the phone wDialog.setRetainInstance(true); //Don't close the dialog when touched outside wDialog.setCancelable(false); return wDialog; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.v(TAG,"onCreateView"); View view = inflater.inflate(R.layout.wifidirect_dialog_wifidirect,container, false); //Log.v(TAG,"FragmentTransaction started"); ListFragment listFragment = new YourListFragment(); FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.addToBackStack(DEVICE_LIST_FRAGMENT_TAG) .replace(R.id.frag_list,deviceListFragment,DEVICE_LIST_FRAGMENT_TAG) .commit(); //Log.v(TAG,"FragmentTransaction finished"); return view; }; @Override public void onActivityCreated(Bundle savedInstanceState){ Log.v(TAG,"onActivityCreated"); super.onActivityCreated(savedInstanceState); Dialog dialog = getDialog(); dialog.setTitle(R.string.wifidirect_dialog_title); // Set button listeners etc.../// Button cancelButton = (Button) view.findViewById(R.id.dialog_wifidirect_cancel); cancelButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { dismiss(); } }); }
Hay realmente un contenedor como se puede ver en el método onCreateView. Utiliza el contenedor para crear tu vista.
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle icicle) { Log.d(TAG, "onCreateView"); View v = inflater .inflate(R.layout.move_folder_dialog, container, false);
Parece que el FragmentManager no es capaz de obtener el contenedor.
¿Podría ser esto un error?
- ¿Cómo se utilizan los valores de android.graphics.Matrix?
- Estudio de Android: INSTALL_FAILED_CONFLICTING_PROVIDER facebook sdk