Android - ListView onItemClick() not firing in 4.1 jellybean
Asked Answered
A

1

6

I had a user just install 4.1 (jelly bean), and the ListView onItemClick() stopped working in my app. The event doesn't fire (checked by breakpoint and console) and the UI doesn't appear to visibly change any. So I tried in the emulator (even though it is incredibly slow), and got the same issue.

Has anyone noticed a difference in the new OS?

There is nothing focusable in my item's layout, and it works fine on older OS's.

Here is the layout containing the ListView:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="@drawable/Background">

  <ImageView
    android:id="@+id/LiveGameLogo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/SmallLogo"/>

  <ImageButton
    android:id="@+id/BackLiveGameButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:src="@drawable/backbutton_button"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="7dp"
    android:layout_marginTop="7dp"/>

  <TextView
    android:id="@+id/LiveGameEditButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/edit_button"
    android:clickable="true"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:layout_marginRight="7dp"
    android:layout_marginTop="7dp"/>

  <ImageView
     android:id="@+id/LiveGameLayoutBackground"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_alignBottom="@+id/LiveGamePlayerLayout"
     android:layout_alignTop="@+id/LiveGamePlayerLayout"
     android:background="@android:color/white"
     android:layout_marginTop="7dp"
     android:layout_marginBottom="7dp"/>

  <ListView
    android:id="@+id/LiveGamesList"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_below="@+id/LiveGamePlayerLayout"
    android:layout_marginTop="-7dp"
    android:layout_above="@+id/LiveGamesAdPlacement"
    android:background="#FFFFFF"
    android:cacheColorHint="#00000000"/>

  <RelativeLayout
      android:id="@+id/LiveGamePlayerLayout"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_below="@+id/LiveGameLogo"
      android:background="@drawable/LiveGameBanner"
      android:layout_marginTop="10dp">

    <ImageView
      android:id="@+id/LiveGamesPlayerImage"
      android:layout_width="50dp"
      android:layout_height="50dp"
      android:layout_centerVertical="true"
      android:layout_marginLeft="5dp"/>

    <ImageView
      android:id="@+id/LiveGamesPlayerBadge"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_centerVertical="true"
      android:layout_marginRight="5dp"/>

    <LinearLayout
      android:id="@+id/LiveGamesLinearLayout1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerVertical="true"
      android:layout_toRightOf="@+id/LiveGamesPlayerImage"
      android:orientation="vertical"
      android:layout_marginLeft="20dp">

      <TextView
        android:id="@+id/LiveGamesPlayerScoreText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/TotalScoreSemicolon"
        android:textColor="@color/darkbluetext"
        android:textSize="16dp" />

      <TextView
        android:id="@+id/LiveGamesPlayerCoinText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginTop="5dp"
        android:drawableLeft="@drawable/GameCoin"
        android:drawablePadding="5dp"
        android:text="@string/Semicolon"
        android:textColor="@color/cointext"
        android:textSize="16dp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/LinearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/LiveGamesLinearLayout1"
        android:orientation="vertical" >

      <TextView
          android:id="@+id/LiveGamesPlayerLifetimeTotal"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="0"
          android:textColor="@color/bluescore"
          android:textSize="20dp" android:layout_marginBottom="2dp"/>

      <TextView
          android:id="@+id/LiveGamesPlayerCurrentTotal"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginTop="4dp"
          android:text="0"
          android:textColor="@color/cointext"
          android:textSize="20dp" />
    </LinearLayout>

  </RelativeLayout>

  <RelativeLayout
    android:id="@+id/LiveGamesAdPlacement"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</RelativeLayout>

Here is the layout of the item:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight">
    <ImageView
      android:id="@+id/GamePlayerImage"
      android:layout_height="50dp"
      android:layout_width="50dp"
      android:layout_alignParentLeft="true"
      android:layout_centerVertical="true"
      android:layout_margin="7dp" />
    <ImageView
      android:id="@+id/GamePlayerBadge"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:layout_toRightOf="@+id/GamePlayerImage" 
      android:layout_centerVertical="true"
      android:layout_marginLeft="5dp"
      android:layout_marginRight="10dp"/>
    <TextView
      android:id="@+id/GamePlayerName"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_toRightOf="@+id/GamePlayerBadge"
      android:layout_toLeftOf="@+id/GamePlayOpponent"
      android:layout_alignTop="@+id/GamePlayerBadge"
      android:ellipsize="marquee"
      android:singleLine="true"
      android:textStyle="bold"
      android:textColor="@color/darkbluetext"
      android:layout_marginTop="3dp"
      android:textSize="20dp" />
    <TextView
      android:id="@+id/GamePlayerScore"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignRight="@+id/GamePlayerName"
      android:layout_alignLeft="@+id/GamePlayerName"
      android:layout_below="@+id/GamePlayerName"
      android:ellipsize="marquee"
      android:singleLine="true"
      android:textStyle="bold"
      android:textColor="@color/darkbluetext"
      android:textSize="18dp" />
    <ImageView
      android:id="@+id/GamePlayOpponent"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:background="@android:color/transparent"
      android:layout_alignParentRight="true"
      android:layout_centerVertical="true"
      android:layout_marginLeft="5dp"
      android:layout_marginRight="5dp" />
</RelativeLayout>

My API level is:

  <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="13" />

Any ideas?

Ahasuerus answered 12/7, 2012 at 13:53 Comment(9)
Can you post the xml where you ListView layout is?Lead
It is working on previous version of android OS?Hin
It works on 2.2, 2.3, 3.0, etc.Ahasuerus
Have you tried using the ItemClick event handler instead?Gaulin
I can confirm I'm seeing similar behavior in our app. I'm investigating why now. But this doesn't sound crazy.Bass
I tried ItemClick as well, but the jellybean emulator is too slow to bear trying anything else. I am waiting to get a real device, should be a day or so.Ahasuerus
I'm seeing that if i add an onTouchListener to the views the adapter builds and adds to the list view, i see the touch event, but onItemClickListener is not being called.Bass
Ok, I resolved my issue but it probably won't help you. I was using a class that extended ListView and in the override of onAttachedToWindow() was not calling super.onAttachedToWindow(). Once I added that, all functionality came back.Bass
Wait, this might be our issue as well. We have subclassed ListView, but I thought it wasn't working in places where we were using the regular ListView also. I will try later on.Ahasuerus
B
8

From my comments, I found that if you have subclassed ListView and overridden onAttachedToWindow, you need to make sure that method calls super.onAttachedToWindow. A library I was using was not doing this and I was seeing the same behavior you were.

Bass answered 21/7, 2012 at 12:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.