Android ListView with clickable items in it's rows causes problems continuing scrolling

AmITheRWord picture AmITheRWord · Nov 19, 2010 · Viewed 10k times · Source

I've been trawling the internet looking for an answer for several hours, but I can't seem to find anyone who has been able to solve this.

I've got a listview which uses a custom adapter. A row looks like this

alt text

The list is filled by an array. Everything works great.

Now, I want the ImageView and the ToggleButton to react to clicks, so I implement the OnClickListener in my adapter, put the items position in each view's tag, and then I set their onclicklistener to this.

Works great, except now I can't use the onListItemClick for starting an activity for the item! OK, I say, I just make the relativelayout holding the text in the middle there use the same onclicklistener. Works great. Everything is clickable, and life is good.

EXCEPT! Now, when I scroll the list, I cannot "continue" the scroll by just flinging again. This causes the scrolling to stop, and I have to fling once more to get it going again. It seems the onclick-thingy causes the fling-motion to be interpreted as a tap or something (it does not trigger the logic within onClick).

I know that this is possible by just going to the phone list on my HTC Hero, which has exactly the kind of layout and behaviour I want from my app. This app even seems to have the onItemClickListener working.

So how can I make sure the list keeps scrolling, and still be able to click the togglebutton, listitem and the imageview? I've been stuck on this all day, and it's giving me a headache :(

Answer

AmITheRWord picture AmITheRWord · Nov 19, 2010

Another quick search before I go home, and I came across this:

How to fire onListItemClick in Listactivity with buttons in list?

CodeFusionMobile mentions setting the android:descendantFocusability property of the list layout to "blocksDescendants", and so I tried doing that. Everything works as expected now. Scrolling works, onListitemClicked works, clicking the ToggleButton works, clicking the ImageView works.

Just to make it clear... In the parent RelativeLayout, right at the top of the row.xml, I added

android:descendantFocusability="blocksDescendants"