views:

3674

answers:

1

Got an activity that extends ListActivity. The list is backed up by a custom adapter that extends BaseAdapter.

getListView().setFocusable(true);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

I do a simple (getSelectedItemPosition() == ListView.INVALID_POSITION) check in onPrepareOptionsMenu() to disable the items that require an item to be selected.

Now, what I do after launching the activity (the action takes place under emulator, ver.1.1) an what it looks like: 1) Hit menu - the menu items are disabled - OK 2) Select an item with mouse wheel and hit menu - the items get enabled - OK 3) Click anywhere outside the list, repeat 2). The items don't get enabled - WTF? 4) Start from scratch, select an item hitting Del and moving mouse. The result is the same as for 3).

Why do these (3, 4) things keep happening to me? :) TIA.

+3  A: 

Relying on the selectedItemPosition on a ListView can be a dangerous approach. In my experience if the List loses focus (by clicking something else) the selectedItemPosition gets set to INVALID_POSITION.

Basically if your item doesn't have that orange 'highlighted' look to it, count on the selectedItemPosition being null.

As an alternative you may want to remember the selected item by overriding the onItemClick and onItemSelection methods and saving the selected item's index, then use that to control your menu option availability.

Reto Meier
First of all, thanks for the top-notch book! Loved the clear way it's written in.As for the ListView, I _have_ the item selected/highlighted, still no (consistent) luck. Works straight after Activity start but not after smth else has been performed.Thanks for the alternative way.
alex