2

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.

4

2 に答える 2

3

Fragment を使用する代わりに、以下の単純なコードを使用できます。ダイアログにリストを表示しています。

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();

}

グレード選択ClickHandler

class DialogGradeSelectionClickHandler implements
        DialogInterface.OnMultiChoiceClickListener {
    public void onClick(DialogInterface dialog, int clicked,
            boolean selected) {
        gradeOptions[clicked] = selected;
    }
}
于 2014-04-25T12:09:44.987 に答える