0

動的データを使用して、複数選択の AlertDialog を構築しようとしています。

わかりました、それはすべて素晴らしいロードなどですが、選択がめちゃくちゃです。

これが私のコードです:

new AlertDialog.Builder(this)
        .setTitle("Cities")
        .setMultiChoiceItems(_options, _selections, new DialogInterface.OnMultiChoiceClickListener(){

                @Override
                public void onClick(DialogInterface dialog, int clicked, boolean selected) {
                        Log.i("Database", _options[clicked] + " selected: " + selected);
                }

        })
        .setPositiveButton("OK", new DialogInterface.OnClickListener(){

                @Override
                public void onClick(DialogInterface dialog, int clicked) {
                    switch(clicked) {
                        case DialogInterface.BUTTON_POSITIVE:
                            for( int i = 0; i < _options.length; i++ ){
                                Log.i("Database", "id: " + _values[i] + " " + _options[i] + " selected: " + _selections[i]);
                            }
                            break;
                    }
                }
        })
        .create();

LogCat でわかるように、私の問題を説明しました。

** OPENED ALERTDIALOG VIA A BUTTON AND SELECTED THE FOLLOWING: **
07-12 16:06:51.347: I/Database(8034): Aveiro selected: true
07-12 16:06:53.936: I/Database(8034): Coimbra selected: true
07-12 16:07:00.116: I/Database(8034): Porto selected: true

** AFTER PRESSING THE OK BUTTON, THIS SHOWS UP, WHICH IS CORRECT: **
07-12 16:07:02.826: I/Database(8034): id: 1 Aveiro selected: true
07-12 16:07:02.826: I/Database(8034): id: 2 Coimbra selected: true
07-12 16:07:02.826: I/Database(8034): id: 3 Porto selected: true
07-12 16:07:02.826: I/Database(8034): id: 4 Minho selected: false

** I CLICKED THE BUTTON TO START THE DIALOG AGAIN DE UNSELECTED THE FOLLOWING: **
07-12 16:07:07.087: I/Database(8034): Coimbra selected: false

** AFTER PRESSING THE OK BUTTON, ALL SHOWS AS FALSE. 1 AND 3 SHOULD BE TRUE: **
07-12 16:07:08.097: I/Database(8034): id: 1 Aveiro selected: false
07-12 16:07:08.097: I/Database(8034): id: 2 Coimbra selected: false
07-12 16:07:08.097: I/Database(8034): id: 3 Porto selected: false
07-12 16:07:08.097: I/Database(8034): id: 4 Minho selected: false
4

2 に答える 2

1

編集

あなたのコードを試してみましたが、うまくいきました。それをステップスルーして、値が正しいことを確認してください。

これが私のテストアプリです。唯一の違いは、何が何だかわからなかった_valuesので、取り出しました。

public class SandBoxActivity extends Activity {

    private Button testButton;

    private CharSequence[] _options = {"Aveiro", "Coimbra", "Porto", "Minho"};

    private boolean[] _selections = {true, true, true, false};

    private AlertDialog test;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        test = new AlertDialog.Builder(this)
        .setTitle("Cities")
        .setMultiChoiceItems(_options, _selections, new DialogInterface.OnMultiChoiceClickListener(){

                @Override
                public void onClick(DialogInterface dialog, int clicked, boolean selected) {
                        Log.i("Database", _options[clicked] + " selected: " + selected);
                }

        })
        .setPositiveButton("OK", new DialogInterface.OnClickListener(){

                @Override
                public void onClick(DialogInterface dialog, int clicked) {
                    switch(clicked) {
                        case DialogInterface.BUTTON_POSITIVE:
                            for( int i = 0; i < _options.length; i++ ){
                                Log.i("Database", "id: " + " " + _options[i] + " selected: " + _selections[i]);
                            }
                            break;
                    }
                }
        })
        .create();

        this.testButton = (Button) findViewById(R.id.color_button);
        this.testButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                test.show();
            }
        });
    }
}

古い投稿

.setMultiChoiceItems(_options, _selections, new DialogInterface.OnMultiChoiceClickListener(){

                @Override
                public void onClick(DialogInterface dialog, int clicked, boolean selected) {
                        Log.i("Database", _options[clicked] + " selected: " + selected);
                }

        })

クリックされたという事実を実際に処理しているとは思いません。クリックされたことをログに出力していることがわかりますが、_selections配列で選択されているという事実を変更していません。それはおそらくあなたの問題かもしれません。

これを試して:

.setMultiChoiceItems(_options, _selections, new DialogInterface.OnMultiChoiceClickListener(){

                @Override
                public void onClick(DialogInterface dialog, int clicked, boolean selected) {
                        _selections[clicked] = selected;
                        Log.i("Database", _options[clicked] + " selected: " + selected);
                }

        })
于 2012-07-12T15:43:48.710 に答える
1

Silentw、これを読んでください

選択したオプションが作成されるたびに、ブール配列を提供する必要があります

また、次のようにコードを更新します

  public void onClick(DialogInterface dialog, int clicked, boolean selected) 
{                      
                     if(!_selections[clicked])
                        _selections[clicked] = true;
                    else
                        _selections[clicked]=false;

                        Log.i("Database", _options[clicked] + " selected: " + selected);

}
于 2012-07-12T15:53:42.983 に答える