Выбор элементов из нескольких вариантов ListView - Android - PullRequest
1 голос
/ 19 января 2012

Я хочу выбрать элементы, которые пользователь проверяет в представлении списка. Я установил для списка вид CHOICE_MODE_MULTIPLE, и он показывает мне список, где я могу сделать несколько выборов. Но как получить проверенные предметы? Я пытался с помощью: SparseBooleanArray sp = lv.getCheckedItemPositions (); Хорошо сохранять отмеченные элементы, но когда любой отмеченный элемент не отмечен, он не обновляет массив; он показывает предыдущие данные, где был проверен теперь непроверенный элемент. Есть ли способ сделать это ?? Вот мой код:

    final ListView lv = new ListView(getApplicationContext());
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
                     android.R.layout.simple_list_item_multiple_choice,arrayList);
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    lv.setAdapter(adapter);

      lv.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView<?> 
            myAdapter, View myView, int myItemInt, long mylng){

            SparseBooleanArray sp= lv.getCheckedItemPositions();

            String str="";
            for(int i=0;i<sp.size();i++)
            {
                str+=arrayList.get(sp.keyAt(i))+",";
            }
            Toast.makeText(getApplicationContext(), 
                    "You selected: "+str,
                    Toast.LENGTH_LONG).show();
          }                 
    });

Я также хочу запомнить отмеченные позиции и показать их как проверенные при открытии списка.

1 Ответ

0 голосов
/ 19 января 2012

Вы должны использовать метод notifyDataSetChanged () в вашем адаптере. Это обновит SparseBooleanArray. Прямо сейчас вы проверяете и снимаете галочки с элементов, а структура вспомогательных данных понятия не имеет, что вы делаете. Вы можете вызвать его через адаптер с помощью adapter.notifyDataSetChanged () или переопределить метод в классе адаптера и вызвать его напрямую.

...