DialogFragment : Using AlertDialog with custom layout
android, android-alertdialog, android-fragments
Solution
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");
}
Problem
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.