滚动后无法在列表中选择项目

时间:2012-10-04 15:31:30

标签: android android-layout

我遇到了扩展ListActivity的Android活动的问题。似乎列表中的项目在我滚动列表之后才能“点击”。滚动列表后,“点击”工作正常。如果列表根本不可滚动(没有足够的项目等),那么一切都可以正常工作。

由于活动延伸ListActivity,我只是覆盖onListItemClick

@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
   Log.e(TAG, "Click fired");
}

列表中的行由自定义XML定义,在阅读了几乎所有帖子后,我认为它与可聚焦元素有关,但我似乎无法让它工作。从下面的XML列表中可以看出,所有项目都有focusable="false",但这没有用。

我也尝试了android:descentFocusability的所有选项 - 但都没有正常工作。

这个问题在Froyo的所有Android版本中都很明显 - > ICS

修改

如果我删除附加到同一列表的onScroll侦听器,我已经确定此问题会消失。但是,我真的需要这个,并且我已将日志信息放在onScrollonScrollStateChanged中,并且没有任何信息显示(例如,滚动也没有被解雇。)这是一个已知的冲突吗? / p>

相关活动的布局XML:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:focusable="false"
    android:focusableInTouchMode="false">
   <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:focusableInTouchMode="false">
     <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Search Results: "
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:layout_gravity="left" 
            android:focusable="false"
            android:focusableInTouchMode="false" />
         <TextView android:id="@+id/query_type"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="context sensitive"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:layout_gravity="right" 
            android:textStyle="italic"
            android:focusable="false"
        android:focusableInTouchMode="false" />
       </FrameLayout>
       <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:minHeight="1dip"
        android:background='@color/grey'
        android:focusable="false"
        android:focusableInTouchMode="false" />
<ListView
    android:id="@+id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:cacheColorHint="#00000000"
    android:descendantFocusability="blocksDescendants" />
<TextView
    android:id="@+id/prodcutdb_results_empty"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="5dip"
    android:paddingTop='4dip'
    android:text="No results"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:visibility="gone"/>
</LinearLayout>

自定义列表项XML:(将可聚焦标记添加到此XML中的LinearLayout无效)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:orientation="horizontal"
    android:paddingRight="4dip"
    android:cacheColorHint="#00000000">
<TextView 
    android:id="@+id/list_item_label"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:paddingLeft="20dip"
    android:textSize="16dp" 
    android:layout_weight="1"
    android:clickable="false"
    android:focusable="false"
    android:focusableInTouchMode="false" />
    <view  
        android:layout_width="wrap_content"
        android:id="@+id/list_item_image"
        android:layout_height="fill_parent"
        android:src="@drawable/right"
        android:maxHeight="50dp"
        android:maxWidth="50dp"
        android:layout_gravity="right"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false" />

</LinearLayout>

3 个答案:

答案 0 :(得分:0)

在自定义列表项XML中,您是否打算将第3个标记设为ImageView?我不确定这是否是导致您出现问题的原因,但如果sdk发现您的XML格式不正确,则可能会导致问题。

答案 1 :(得分:0)

您应该将列表放在可以显示的普通LayoutView(不要使用scrollView)中,并在需要时使其余布局消失,反之亦然,这样列表就可以拥有完整的屏幕。这就是它对我的作用。

EDIT 我像这样使用它

  <RelativeLayout
    android:id="@+id/NewsListLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" android:visibility="gone">

    <ListView
        android:id="@+id/mylistView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</RelativeLayout>

答案 2 :(得分:0)

保持简短 - 没有任何效果。我为每个自定义视图添加了一个onClick侦听器。