DialogFragment with custom ListView

android, android-listview, dialogfragment

Solution

Instead of using `onCreateView` you should be overriding `onCreateDialog` and inside of it, it'll look something like:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Collections.addAll(mOfficeListItems, getResources().getStringArray(R.array.offices)); 
    View v = getActivity().getLayoutInflater().inflate(R.layout.fragment_choice_list, null);

    mLocationList = (ListView)v.findViewById(R.id.location_criteria_list);

    final FunctionListArrayAdapter adapter = new FunctionListArrayAdapter(
            this, android.R.layout.simple_list_item_1, mOfficeListItems);
    mLocationList.setAdapter(adapter);

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    builder.setTitle(getArguments().getInt("title")).setView(v);

    return builder.create();
}

This quote from the `DialogFragment` documentation page describes what you're trying to do:

Implementations should override this class and implement `onCreateView(LayoutInflater, ViewGroup, Bundle)` to supply the content of the dialog. Alternatively, they can override `onCreateDialog(Bundle)` to create an entirely custom dialog, such as an `AlertDialog`, with its own content.

In your case, it seems like `onCreateDialog` is the way to go since you want to do a custom inner view.

Problem

I'm trying to create a DialogFragment that shows a dialog with a custom ListView inside. ``` public class MultiSelectDialogCustom extends DialogFragment { ListView mLocationList; private ArrayList<String> mOfficeListItems = new ArrayList<String>(); public static MultiSelectDialogCustom newInstance(int title) { MultiSelectDialogCustom dialog = new MultiSelectDialogCustom(); Bundle args = new Bundle(); args.putInt("title", title); dialog.setArguments(args); return dialog; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Collections.addAll(mOfficeListItems, getResources().getStringArray(R.array.offices)); View v = inflater.inflate(R.layout.fragment_choice_list, container, true); mLocationList = (ListView)v.findViewById(R.id.location_criteria_list); final FunctionListArrayAdapter adapter = new FunctionListArrayAdapter( this, android.R.layout.simple_list_item_1, mOfficeListItems); mLocationList.setAdapter(adapter); getDialog().setTitle(getArguments().getInt("title")); return v; } } ``` When calling it from a fragment : ``` MultiSelectDialogCustom dialogFrag = MultiSelectDialogCustom_.newInstance(R.string.dialog_title); dialogFrag.show(getActivity().getSupportFragmentManager(), null); ``` It only shows a blank dialog with the title... why my isn't my list displayed?

Original source