Чекбоксы не меняют статус проверки в пользовательском интерфейсе? - PullRequest
2 голосов
/ 08 ноября 2011

У меня есть ListView, который я пытаюсь использовать со списком проверяемых элементов. Я вызываю метод toggle () в своем классе элементов списка в ArrayAdaptor, но флажок не отмечен в пользовательском интерфейсе. Тем не менее, я могу подтвердить, что в пользовательском интерфейсе выбраны правильные элементы , и что статус isChecked () сообщает правильно - только пользовательский интерфейс вообще не меняется. Существуют ли какие-либо специальные методы, которые мне нужно вызывать для обновления графического флажка для пользовательского интерфейса?

Другими словами - как программно сообщить пользовательскому интерфейсу, что флажок должен отображаться как «отмечен»? Кажется, это должен быть очень простой процесс, но у меня было много проблем с поиском этой информации.

Код выглядит следующим образом:

Для класса данных элемента в ArrayAdaptor:

public class SelectedItemData extends CheckedTextView {

        public String _item_name;
        public String getItemName()
        {
            return _item_name;
        }
        public void setItemName(String in_name)
        {
            _item_name = in_name;
        }

        // methods

        public SelectedItemData(Context context) {
            super(context);
            init();
        }

        public void init()
        {
            this._item_name = "UNSET";
            this.setChecked(false);
        }

        @Override
        public String toString()
        {
            return _item_name;
        }
    }

В классе Activity (находится в методе onCreate):

_selectedItemsListView = (ListView) findViewById(R.id.selected_items_listview);
_selectedItemsListView.setItemsCanFocus(false);
_selectedItemsListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
_selectedItemsListView.setOnItemClickListener(new OnItemClickListener() {
@Override
    public void onItemClick(AdapterView<?> listview, View view, int position, long id) {
        @SuppressWarnings("unchecked")
        ArrayAdapter<SelectedItemData> itemsAdapter = (ArrayAdapter<SelectedItemData>)_selectedItemsListView.getAdapter();
        SelectedItemData selectedItem = itemsAdapter.getItem(position);
        selectedItem.toggle();
        Toast.makeText(view.getContext(), "Item " + selectedItem.getItemName() + " Selected!", Toast.LENGTH_SHORT).show();
        Log.d(TAG, "Is Item Checked? " + selectedItem.isChecked());
        _selectedItemsListView.setAdapter(itemsAdapter);
        }
});

Любое руководство о том, как включить в пользовательском интерфейсе правильное отображение того, что один из элементов был выбран / отмечен, было бы замечательно. Спасибо!

1 Ответ

1 голос
/ 08 ноября 2011

Вы должны обновить свой адаптер новым элементом и установить для него вид списка.(ItemsAdapter.setItem (пункт, позиция))

...