Android列表视图setOnItemClickListener仅在以下情况下有效

问题描述 投票:0回答:2

我有一个Android布局。我设置了像list.setOnItemClickListener这样的听众。一切似乎都很好。

在下面的行中:

<ScrollView android:layout_width="fill_parent"
            android:layout_height="wrap_content">

如果我将android:layout_heightwrap_content更改为fill_parent它不再起作用(我的列表中的项目无法选择)。

它只有在设置为wrap_content时才有效。为什么会这样?

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@android:id/tabhost"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
<LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <TabWidget android:id="@android:id/tabs"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
            />
    <FrameLayout android:id="@android:id/tabcontent"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
            >
        <ListView android:id="@+id/restaurants"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                />
        <ScrollView android:layout_width="fill_parent"
                    android:layout_height="wrap_content">

            <TableLayout android:id="@+id/details"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
                         android:stretchColumns="1"
                         android:shrinkColumns="1"
                         android:paddingTop="4dip"
                    >
                <TableRow>
                    <TextView android:text="@string/name" />
                    <EditText android:id="@+id/name" />
                </TableRow>
                <TableRow>
                    <TextView android:text="@string/address" />
                    <EditText android:id="@+id/addr" />
                </TableRow>
                <TableRow>
                    <TextView android:text="Type:" />
                    <RadioGroup android:id="@+id/types">
                        <RadioButton android:layout_height="wrap_content"
                                     android:layout_width="wrap_content"
                                     android:id="@+id/take_out"
                                     android:text="@string/takeout"
                                     android:checked="true"
                                />

                        <RadioButton android:layout_height="wrap_content"
                                     android:layout_width="wrap_content"
                                     android:id="@+id/sit_down"
                                     android:text="@string/sitdown"
                                />
                        <RadioButton android:layout_height="wrap_content"
                                     android:layout_width="wrap_content"
                                     android:id="@+id/delivery"
                                     android:text="@string/delivery"
                                />
                    </RadioGroup>
                </TableRow>

                <TableRow>
                    <TextView android:text="@string/notes" />
                    <EditText android:id="@+id/notes" />
                </TableRow>

                <Button android:id="@+id/save"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="@string/save"
                        />
            </TableLayout>
        </ScrollView>
    </FrameLayout>
</LinearLayout>
</TabHost>
android onitemclicklistener android-wrap-content
2个回答
0
投票

fill_parent(在API等级8及更高版本中弃用并重命名为MATCH_PARENT

将窗口小部件的布局设置为fill_parent将强制它扩展以占用放置它的布局元素中可用的空间。这大致相当于将Windows窗体控件的dockstyle设置为Fill

将顶级布局或控件设置为fill_parent将强制它占据整个屏幕。

wrap_content

将视图的大小设置为wrap_content将强制它扩展到足以包含它包含的值(或子控件)。对于控件 - 如文本框(TextView)或图像(ImageView) - 这将包装正在显示的文本或图像。对于布局元素,它将调整布局大小以适合作为其子项添加的控件/布局。

Android代码文档here中有一些细节。


0
投票

您的ScrollView占用了ListView中可以填充在屏幕上的所有可用空间,基本上可以覆盖它。

您永远不应该使用带有ListView的ScrollView,因为ListView负责自己的垂直滚动。最重要的是,这样做会使ListView中的所有重要优化都无法处理大型列表,因为它有效地强制ListView显示其整个项目列表以填充ScrollView提供的无限容器。 - 来自http://developer.android.com/reference/android/widget/ScrollView.html

© www.soinside.com 2019 - 2024. All rights reserved.