2

我试图让 AlertDialog 出现,让用户从列表中选择几个项目。这应该很简单,我遵循了这个指南: http: //developer.android.com/guide/topics/ui/dialogs.html 但是我的项目没有出现!我只是得到一个带有消息和按钮的对话框,没有列表项......

这是我的代码:

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

}

请帮我找出我的错误。

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 回答
0

对话框片段将像普通片段一样工作。所以使用自定义 XML 文件创建任何你想要的东西

想 。喜欢以下

public class TestDialogFragment extends DialogFragment implements
OnClickListener {

    protected String LOG = "FdshistoryDialogFragment";

    // ====== widgets ========
    Button save_button, close_button;
    ListView _listView;
    private static List<String> mList ;


    /**
     * Create a new instance of MyDialogFragment, providing "ROS details" as an
     * argument.
     */
    public static TestDialogFragment newInstance(String title,
            List<String> mMainlist) {

        TestDialogFragment f = new TestDialogFragment();
        mList = new ArrayList<String>();

        mList = mMainlist;
        // Supply input as an argument.
        Bundle args = new Bundle();
        args.putString("title", title);
        f.setArguments(args);

        return f;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        int style = DialogFragment.STYLE_NORMAL, theme = android.R.style.Theme_Holo_Light_Dialog;
        setStyle(style, theme);



    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        String mTitle = getArguments().getString("title");
        getDialog().setTitle(mTitle);

        View view = inflater.inflate(R.layout.finaldiagno_historylayout,container);

        _listView = (ListView) view.findViewById(R.id._listView);

        save_button = (Button) view.findViewById(R.id.save_button);
        close_button = (Button) view.findViewById(R.id.close_button);


        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        save_button.setOnClickListener(this);
        close_button.setOnClickListener(this);

        TestAdapter alertAdapter = new TestAdapter(getActivity(), mList);
        _listView.setAdapter(alertAdapter);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {

        case R.id.save_button:



            break;
        case R.id.close_button:

            getDialog().dismiss();

            break;
        }
    }   
}

试试这个它会工作

于 2014-04-25T12:03:36.277 回答