我正尝试使用GridView中的复选框显示动态增长的字符串列表,该列表本身位于TableLayout中。如何在添加项目时使GridView适应其高度
我可以在一行中显示这些“复选框”字符串。我让用户在GridView中动态添加新字符串时发生问题。
我创建了一个接收字符串列表的自定义适配器。假设我们有n个字符串。适配器返回'n + 1'表示物品计数;在getView,它返回:
- 用的LinearLayout,本身具有CheckBox和用于第一n项一个EditText视图,
- 用一个简单的按钮的LinearLayout,具有用于一个“+”字幕的'第n + 1项。
到目前为止好。当单击“+”按钮时,我将一个空字符串添加到字符串列表中,并在适配器中调用notifyDataSetChanged。
GridView重绘自己与一个更多的项目。但它保持原来的高度,并创建一个垂直滚动条。我希望GridView扩展其高度(即在屏幕上占用更多空间并显示所有项目)。
我试图将屏幕更改为垂直LinearLayout而不是TableLayout,但结果是相同的。
这里是我的屏幕布局:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<!-- other lines omitted -->
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/wine_rack_explanation"
android:layout_gravity="center_vertical" />
<GridView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/gvRack"
android:columnWidth="90dp"
android:numColumns="auto_fit" />
</LinearLayout>
<!-- other lines omitted -->
</LinearLayout>
</ScrollView>
从适配器的复选框+字符串项的定义如下:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<CheckBox android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cbCoordinate"
android:checked="true"
/>
<EditText android:id="@+id/txtCoordinate"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
的“+”按钮项被这样定义:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button android:id="@+id/btnAddBottle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/add_bottle_caption" />
</LinearLayout>
我试图在添加项目后在GridView上调用invalidate或invalideViews。在TableLayout和TableRow上也被称为invalidate(在屏幕的前一个布局中)。没有成功。
任何想法为什么GridView拒绝延长其高度?
(请注意,我用的其他的ViewGroup比GridView的完全开放)
我有几乎完全相同的问题 - 有谁知道如何做到这一点? – 2011-08-17 10:00:19
我认为它可以帮助他人http://stackoverflow.com/a/23802813/5887689 – 2016-05-29 08:09:59
也许这个答案可以帮助你https://stackoverflow.com/questions/21482989/how-to-assign-wrap-content-as -height-dynamic-loaded-gridview/46350213#46350213 – 2017-09-21 18:01:19