DialogFragment: Utilizar AlertDialog con diseño personalizado

Estoy reescribiendo mi aplicación con soporte de Fragments API . En la aplicación original tengo un AlertDialog que se crea así:

  LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.button_dialog, null); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setView(view); ListView mListView = (ListView) view.findViewById(R.id.mblist); builder.setTitle(getString(R.string.sysinfo)).setNeutralButton( getString(R.string.okay), null); Cursor dcursor = propManager.propCursor(); if (dcursor.moveToFirst()) { startManagingCursor(dcursor); String[] from = { Constants.NAME_DET, Constants.VALUE_DET }; int[] to = { R.id.mbname, R.id.mbvalue }; SimpleCursorAdapter dadapter = new SimpleCursorAdapter(this, R.layout.info_list_row, dcursor, from, to); mListView.setAdapter(dadapter); } final Dialog dialog = builder.create(); dialog.show(); 

¿Cómo puedo mostrar el mismo diálogo a través de un DialogFragment? He leído la documentación pero tengo problemas para averiguar cómo proceder con esto.

Me sorprende que nadie responda. Esta es la solución:

 public class PropDialogFragment extends DialogFragment { private PropDialogFragment() { /*empty*/ } /** creates a new instance of PropDialogFragment */ public static PropDialogFragment newInstance() { return new PropDialogFragment(); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { //getting proper access to LayoutInflater is the trick. getLayoutInflater is a //Function LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.my_dialog, null); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setView(view); builder.setTitle(getActivity().getString(R.string.sysinfo)).setNeutralButton( getActivity().getString(R.string.okay), null); return builder.create(); } } 

Puede mostrar el diálogo utilizando:

 private void showDialog() { // DialogFragment.show() will take care of adding the fragment // in a transaction. We also want to remove any currently showing // dialog, so make our own transaction and take care of that here. FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); // Create and show the dialog. DialogFragment newFragment = PropDialogFragment.newInstance(); newFragment.show(ft, "dialog"); } 

Básicamente, sólo puede mostrar su Fragmento como este:

 SherlockDialogFragment newFragment = new TimePickerFragment(); newFragment.show(getActivity().getSupportFragmentManager(), "timePicker"); 

Y esto sería un simple TimePickerFragment:

 public class TimePickerFragment extends SherlockDialogFragment implements TimePickerDialog.OnTimeSetListener{ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); } } 
  • ¿Cómo eliminar una pestaña con barra de acción, viewpager y múltiples fragmentos?
  • Android restore instance state de un fragmento que está en backstack
  • Viewpager no funciona correctamente en lollipop 5.0 cuando uso otros fragmentos
  • Nullpointer excepción en oncreateView () de fragmento
  • DrawerLayout - Excepción que envía el evento de entrada
  • Cómo enlazar un servicio de un fragmento
  • Acerca de Android Progress Dialog. ¿Evitar?
  • SDK 5.0 RecyclerView no se puede instanciar
  • Solicitar permisos de tiempo de ejecución desde v4.Fragment y tener devolución de llamada ir a Fragment?
  • Cómo comprometer Fragment transacciones en FragmentPagerAdapter en onLoadFinish método de devolución de llamada?
  • Guardando un backstack a través del cambio de orientación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.