0

私は DialogFragments に関するいくつかの Android チュートリアルに従い、カスタマイズしました。これが私がコーディングしたものです。

public class ChooseDialog extends DialogFragment {

ArrayList mSelectedItems;
CharSequence[] items;
boolean[] selected;


public static ChooseDialog newInstance(CharSequence[] options) {
    ChooseDialog f = new ChooseDialog();

    Bundle args = new Bundle();
    args.putCharSequenceArray("items", options);
    f.setArguments(args);

    return f;
}


@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    mSelectedItems = new ArrayList();

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle("Choose")
            .setMultiChoiceItems(savedInstanceState.getCharSequenceArray("items"), null,
             new DialogInterface.OnMultiChoiceClickListener() {
                   public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) {
                       if (isChecked) {
                           mSelectedItems.add(whichButton);
                       } else if (mSelectedItems.contains(whichButton)) {
                           mSelectedItems.remove(Integer.valueOf(whichButton));
                       }
                   }
            })
            .setPositiveButton("Chosen", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                }
            });


    return builder.create();
}
}

ダイアログを表示したいアクティビティを呼び出します。

CharSequence items[] = { "foo", "bar" };

DialogFragment newFragment = ChooseDialog.newInstance(items);
newFragment.show(this.getFragmentManager(), "somedialog");

Bundle savedInstanceState が null であるため、setMultiChoiceItems を呼び出すときにクラッシュします。私は何をすべきか?Android開発の学習を始めたばかりなので、もっとエレガントにできるかもしれません.. :)

4

2 に答える 2

0

savedInstanceState バンドルは、引数が格納されている場所ではありません。

必要なバンドルは getArguments(); からのものです。

それで

savedInstanceState.getCharSequenceArray("items")

になる

getArguments().getCharSequenceArray("items")
于 2013-09-13T13:57:03.377 に答える