Search code examples
androidandroid-alertdialogmultichoiceitems

List items do not appear in AlertDialog


I'm trying to make an AlertDialog appear, that let's the user pick several items from a list. That should be pretty straightforward, and i followed this guide: http://developer.android.com/guide/topics/ui/dialogs.html But my items do not appear! I just get a dialog with the message and the buttons, no listitems...

This is my code:

public class PlayerPickerDialogFragment extends DialogFragment {
//OK - so I tried making a CharSequence array, just to be sure where the error was...
final CharSequence[] names = {"cgu", "carl"};
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    final ArrayList mSelectedItems = new ArrayList();  // Where we track the selected items
    System.out.println(PersistentData.getInstance().getPlayerNames().toString());
    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage(R.string.pick_players)
    //.setMultiChoiceItems(PersistentData.getInstance().getPlayerNames(), null, new DialogInterface.OnMultiChoiceClickListener() {
        .setMultiChoiceItems(names, null, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which,
                boolean isChecked) {
            if (isChecked) {
                // If the user checked the item, add it to the selected items
                mSelectedItems.add(which);
            } else if (mSelectedItems.contains(which)) {
                // Else, if the item is already in the array, remove it 
                mSelectedItems.remove(Integer.valueOf(which));
            }
        }
    })
    .setPositiveButton(R.string.play,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    ArrayList<Player> players = new ArrayList<Player>(
                            PersistentData.getInstance().getPlayers());
                    GameState newGame = new GameState(players);
                    PersistentData.getInstance().setGameState(newGame);
                    Intent intent = new Intent(getActivity(),
                            GameActivity.class);
                    startActivity(intent);
                }
            })
            .setNegativeButton(R.string.cancel,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });
    // Create the AlertDialog object and return it
    return builder.create();
}

}

Please help me find my error.


Solution

  • Instead of using Fragment you can use simple below code. It is showing list on dialog.

    public class MainActivity extends Activity {
    private boolean[] gradeOptions = new boolean[12];
    String item[] = { "Grade1", "Grade2", "Grade3", "Grade4", "Grade5",
            "Grade6", "Grade7", "Grade 8", "Grade9", "Grade10", "Grade11",
            "Grade12" };
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("Grade");
    
        builder.setMultiChoiceItems(item, gradeOptions,
                new DialogGradeSelectionClickHandler());
        builder.setCancelable(false)
    
        .setNegativeButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
            }
    
        });
        AlertDialog diag = builder.create();
        diag.show();
    
    }
    

    grade selectionClickHandler

    class DialogGradeSelectionClickHandler implements
            DialogInterface.OnMultiChoiceClickListener {
        public void onClick(DialogInterface dialog, int clicked,
                boolean selected) {
            gradeOptions[clicked] = selected;
        }
    }