I'm rewriting my application with Fragments API
support. In the original application I have an AlertDialog
that is created like this :
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();
How can I display the same dialog via a DialogFragment? I have read the documentation but have trouble figuring out how to proceed with this.
I'm surprised that nobody answered. This is the solution:
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(); } }
You can show the dialog using :
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"); }
Basically you can just show your Fragment like this:
SherlockDialogFragment newFragment = new TimePickerFragment(); newFragment.show(getActivity().getSupportFragmentManager(), "timePicker");
And this would be a 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())); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With