Возвращение значений из множественного выбора ListView

Редактировать: Хорошо, я нашел решение. Не знаю, что это правильное решение, но оно работает правильно. Добавлен в код ниже.

Я пытаюсь разрешить пользователю выбрать количество каталогов из контрольного списка и вернуть их после нажатия кнопки «Отправить». Вот фрагмент моего кода. Он заполняет ListView всеми каталогами в / sdcard /, и для первоначального выбора (из всех, которые я выбираю), когда я отправляю, в журнале отображаются правильные возвращенные варианты. Однако, если я снимаю отметку с элемента и снова нажимаю «Отправить», он все равно показывает, как будто все выбраны. Нужно ли писать обработчик, чтобы снять отметку с элемента? Я думал, что позаботился о выборе выбора режима? Спасибо!

private SparseBooleanArray a;    
directoryList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, directoryArray));
    submitButton = (Button)findViewById(R.id.submit_button);
    submitButton.setOnClickListener(new OnClickListener()
        {
        @Override
        public void onClick(View v)
        {
            a = new SparseBooleanArray();
            a.clear();
            a = directoryList.getCheckedItemPositions();

            for (int i = 0; i < a.size(); i++)
            {
                //added if statement to check for true. The SparseBooleanArray
                //seems to maintain the keys for the checked items, but it sets
                //the value to false. Adding a boolean check returns the correct result.                    
                if(a.valueAt(i) == true)
                    Log.v("Returned ", directoryArray[a.keyAt(i)]);

            }                
        }
    });
10
задан kcoppock 13 August 2010 в 03:14
поделиться

1 ответ

Сделал еще немного отладки и нашел решение, которое работает для меня. Отредактировал в код выше. По какой-то причине, SparseBooleanArray не опустошается сам по себе; он сохраняет ключи ячеек, которые были проверены. Однако, когда вызывается getCheckedItemPositions(), он устанавливает VALUE в false. Таким образом, ключ все еще находится в возвращаемом массиве, но его значение равно false. Только отмеченные флажки будут отмечены значением true.

3
ответ дан 4 December 2019 в 01:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: