Я пытаюсь отобразить динамически растущий список строк с флажком в GridView, который сам по себе находится в TableLayout.
Я могу отображать эти строки с флажками в порядке.Моя проблема возникает, когда я позволяю пользователю динамически добавлять новые строки в GridView.
Я создал специальный адаптер, который получает список строк.Скажем, у нас есть n строк.Адаптер возвращает n + 1 для количества элементов;в getView он возвращает:
- a View с LinearLayout, сам с CheckBox и EditText для первых n элементов,
- 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 в TableLayout и TableRow (в предыдущем макете экрана).Безуспешно.
Есть идеи, почему GridView отказывается увеличивать свою высоту?
(Обратите внимание, что я полностью открыт для использования другой группы просмотра, кроме GridView)