1

DialogFragmentカスタム着信音セレクターをポップアップする があります。Ringtoneただし、いずれかを選択して [OK] をクリックしても適切な値が得られません。以下の何が間違っているのですか?

ダイアログはこれで作成されます

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        rm = new RingtoneManager(getActivity());
        ringtones = rm.getCursor();

        int selected = -1;

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.ringtone);
        builder.setSingleChoiceItems(ringtones,
                selected,
                ringtones.getColumnName(RingtoneManager.TITLE_COLUMN_INDEX),
                mChoiceListener);
        builder.setPositiveButton("OK", this);
        builder.setNegativeButton("Cancel", this);
        return builder.create();

    }

    private DialogInterface.OnClickListener mChoiceListener =
        new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int position) {
                ringtones.moveToPosition(position);
            }

    };

[OK] ボタンが選択されると、キャプチャされます。

public void onClick(DialogInterface dialog, int which) {
        Log.d("DayPickerFragment", "onClick");
        switch(which) {
            case Dialog.BUTTON_NEGATIVE:
                dialog.cancel();
                break;

            case Dialog.BUTTON_POSITIVE:
                Uri uri = rm.getRingtoneUri(ringtones.getPosition());
                Ringtone r = RingtoneManager.getRingtone(getActivity(), uri);

                /*** etc ***/

                /*** returned ringtone doesn't match what was selected ***/
                dialog.dismiss();
                break;
        }
    }

メソッドが着信音カーソルrm.getRingtoneUri(position)に対応していないことが原因でしょうか?もしそうなら、どのようにして選択したアイテムの実数を取得しますか?Uri

どんな助けでも大歓迎です。

4

1 に答える 1

0

なぜ機能しないのかわかりません。私はCursorオブジェクトについて何かを理解していないと推測しています。

ただし、プライベート変数を使用して移動することになったのは次のとおりです。

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        rm = new RingtoneManager(getActivity());
        ringtones = rm.getCursor();

        int selected = -1;

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.ringtone);
        builder.setSingleChoiceItems(ringtones,
                selected,
                ringtones.getColumnName(RingtoneManager.TITLE_COLUMN_INDEX),
                this);
        builder.setPositiveButton("OK", this);
        builder.setNegativeButton("Cancel", this);
        return builder.create();
    }

public void onClick(DialogInterface dialog, int position) {
        switch(position) {
            case Dialog.BUTTON_NEGATIVE:
                mp.reset();
                mp.release();
                dialog.cancel();
                break;

            case Dialog.BUTTON_POSITIVE:
                mp.reset();
                mp.release();

                Uri uri2 = rm.getRingtoneUri(mPosition);
                Ringtone r = RingtoneManager.getRingtone(getActivity(), uri2);
                /*** Use ringtone as needed ***/
                dialog.dismiss();
                break;

            default: // dialog click
                ringtones.moveToPosition(position);
                mPosition = position;

                Uri uri = rm.getRingtoneUri(mPosition);
                mp.reset();
                try {
                    mp.setDataSource(getActivity(), uri);
                    mp.prepare();
                    mp.start();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
        }
    }

着信音を渡して、見つかった場合は選択済みとして設定するなど、いくつかの追加のことを行っていますが、これが基本的な考え方です。

于 2012-06-09T02:10:03.777 に答える