DashRantic
DashRantic

Reputation: 1518

Checkboxes not changing checked status in UI?

I have a ListView that I am trying to use with a checkable item list. I am calling the toggle() method on my list item class in the ArrayAdaptor, but the checkbox is not being ticked in the UI. However, I can confirm that the correct items are being selected in the UI, and that the "isChecked()" status reports back correctly--just the UI doesn't change at all. Are there any special methods I need to call to update the checkbox graphic for the UI?

To put it another way--how do I programmatically tell the UI that a checkbox should show up as "checked"? It seems this should be a very simple process, but I've been having a lot of trouble finding this information.

Code is as follows:

For the item data class in the 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;
        }
    }

In the Activity class (located within the onCreate method):

_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);
        }
});

Any guidance on how to enable the UI to properly display that one of the items have been selected/checked would be great. Thanks!

Upvotes: 2

Views: 955

Answers (1)

Mal
Mal

Reputation: 373

You have to update your adapter with the new item and set it to the listview. (itemsAdapter.setItem(item,position))

Upvotes: 1

Related Questions