来自另一项活动回来时,没有响应的Android ListView的项目?(Android ListV

2019-07-30 02:46发布

我创建从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>

Answer 1:

我有完全一样的问题,因为你。 更奇怪的事情发生在一些平板电脑4.0或4.1,虽然它没有一个电话4.1上发生。 使用“descendentFocusabilty = blocksDescendants”并没有解决这个问题。

继user1603602的想法,我问列表中的每个视图变得可见时间(因此一个列表中元素的重绘)的意见的失效:

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

当它重新加载列表中的每个项目,如果你用的动画,例如加载图像也可以是烦人,但它解决了这个问题,并保持滚动位置。



Answer 2:

我有同样的问题,只是想出一个办法来解决这个问题。 删除列表视图,然后将其添加回来。 这将强制视图刷新到原来的工作状态。

例如,如果你ListView lv是对LinearLayout lout

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

确保你从UI线程调用此。



Answer 3:

我觉得这是描述了同样的问题在这里

我使用含有视图的阵列的定制适配器。 在getView(位置,...),我回在指定的位置查看。 显然,ListView控件不喜欢这个,有时(特定平台)回收不应该被回收的意见。



文章来源: Android ListView items not responding when come back from another activity?