从其他活动回来时,Android ListView项目没有响应?

时间:2012-06-25 07:18:17

标签: android listview onclick

我从ArrayAdapter创建一个ListView。 ListView的每一行都有一个ImageView和一个TextView。现在我使用setOnItemClickListener

处理点击事件
lv = getListView();
    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            CategoryInfo cat = (CategoryInfo) lv
                    .getItemAtPosition(position);
            showGameByCategory(Long.valueOf(cat.getId()), cat.getName());
        }
    });

当我点击一行时,它将启动另一个活动。在那个活动上,我有一个按钮可以返回ListView。点击该按钮后,我会拨打Activity.finish();

问题出在这里:第一次打开ListView并点击任何项目,它可以正常工作并打开新活动。但是当我单击按钮返回ListView时,我无法点击任何项目。我的应用程序有很多选项卡,如果我切换到另一个选项卡并切换回ListView,我可以再次单击ListView项目。但是无论何时我点击按钮,这些项目都是不可点击的。

我在2个不同的操作系统上进行测试,它在Android 2.3上正常运行,但在Android 4.0上发生了此错误。

有谁知道如何解决这个问题?

编辑:这是我的布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:background="@drawable/listitem_selector_odd"
    android:padding="6dip" >

    <RelativeLayout
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/avatar"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_marginRight="6dip" 
            android:layout_alignParentLeft="true"/>

        <TextView
            android:id="@+id/toptext"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_toRightOf="@+id/avatar"
            android:layout_marginRight="6dip"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:textColor="#000000"
            android:textSize="18dp"
            android:textStyle="bold" >
        </TextView>

        <ImageView
            android:id="@+id/arrow"
            android:layout_width="10dip"
            android:layout_height="15dip"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="6dip"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:src="@drawable/arrow_icon" />
    </RelativeLayout>

</LinearLayout>

3 个答案:

答案 0 :(得分:1)

我和你有完全相同的问题。更奇怪的是,它发生在一些平板电脑4.0或4.1,而它没有发生在手机4.1上。 使用“descendentFocusabilty = blocksDescendants”并没有解决它。

按照user1603602的想法,每当View变为可见时,我都要求列表的视图失效(因此重新绘制列表的元素):

@Override
protected void onWindowVisibilityChanged(int visibility) {
    super.onWindowVisibilityChanged(visibility);
    if (visibility == View.VISIBLE) {
        list.invalidateViews();
    }
}

当它重新加载列表中的每个项目时,如果你加载带有动画的图像会很烦人,但它可以解决问题,并保持滚动位置。

答案 1 :(得分:0)

我遇到了同样的问题,并找到了解决问题的方法。删除列表视图,然后将其添加回来。这将强制视图刷新到原始工作状态。

例如,如果ListView lv位于LinearLayout lout

 lout.removeView(lv);
 lout.addView(lv);

确保从UI线程中调用此方法。

答案 2 :(得分:0)

我认为这与描述here

的问题相同

我使用了一个包含Views数组的自定义适配器。在getView(position,...)中,我返回指定位置的View。显然,ListView不喜欢这样,有时(特定于平台)回收不应回收的视图。