Множественный выбор в диалоговом окне оповещения - PullRequest
1 голос
/ 05 марта 2011

Я фокусируюсь на следующей проблеме.У меня есть диалоговое окно предупреждения с setMultipleChoiceItems, диалоговое окно создается и отображается правильно, но когда я пытаюсь снять флажок с любого из выбранных элементов, элемент остается проверенным.Вот фрагмент кода:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(context, 
                        android.R.id.text1, 
                        c, 
                        new String[] {label}, 
                        new int[] {android.R.id.text1} 
            ); 
            AlertDialog dialog=new AlertDialog.Builder(context) 
               .setTitle(title) 
               .setPositiveButton(R.string.okBtn, null) 
               .setNegativeButton(R.string.cancelBtn, null) 
               .setMultiChoiceItems(c,state,label, 
               new DialogInterface.OnMultiChoiceClickListener() { 
                            public void onClick(DialogInterface dialog, int which, 
                                            boolean isChecked) { 
                                    Log.v("TEST", "onClick(..) called with value " + which +
                                       " / "+ isChecked); 
                            } 
               }) 
               .create(); 
             dialog.show() 

Althought, метод OnMultiChoiceClickListener () вызывается и в журнале я вижу: "onClick (..) вызывается со значением 2 / false", поэтому он говорит, что выбранэлемент должен быть ЛОЖНЫ (не отмечен), но диалог не обновляется, и элемент остается проверенным.Есть идеи, почему это так?

1 Ответ

0 голосов
/ 04 мая 2012

Из-за этого: http://code.google.com/p/android/issues/detail?id=2998

По крайней мере, насколько я понимаю, вы должны обновить базу данных, когда элемент отмечен / снят. Лично мне не нравится эта идея, и для списков с множественным выбором я использую ListArrays вместо курсоров:

        final Cursor mCursor = mDbAdapter.getAllData();
        final CharSequence[] names = new CharSequence[mCursor.getCount()];
        final boolean[] selected = new boolean[mCursor.getCount()];
        mCursor.moveToFirst();
        while (!mCursor.isAfterLast()) {
            names[it] = mCursor.getString(0);
            selected[it] = mCursor.getString(1);                
            mCursor.moveToNext();
        }
        mCursor.close();

        mBuilder.setMultiChoiceItems(names, selected, new DialogInterface.OnMultiChoiceClickListener() {
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                Toast.makeText(getApplicationContext(), names[which] + ": " + ((isChecked) ? "on" : "off"), Toast.LENGTH_SHORT).show();
            }
        });

Это не лучший способ сделать это, но я не знаю ничего лучше.

...