Android: динамически добавлять элементы в ListView без беспорядка

В ListActivity у меня есть "Еще" Button под списком.

Когда я нажимаю на нее, результат добавляется в список правильно, но проблема в том, что после этого кнопка исчезает! Я хочу, чтобы он оставался там, и пользователь, конечно же, мог снова загружать больше данных!

Код:

btnMoreItems.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // some fake data
            for (int i = 10; i < 20; i++) {
                data.add( // fake data to attach to the list //);
            }

            setListAdapter(new MyCustomArrayAdapter(MyListActivity.this, data));
        }
    });

и макет примерно такой:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

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

    <TextView
        android:id="@+id/android:empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/myListEmpty" />

    <Button
        android:id="@+id/btnMoreItemsLoad"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
    → → android:layout_below="@+id/android:list ← ← ← ← ←
        android:text="@string/moreItems" />

</RelativeLayout>

Когда активность загружается в первый раз, кнопка находится в нужном месте. Но при нажатии он исчезает за добавленными элементами.

С этой строкой: android:layout_below="@+id/android:list я ожидаю, что кнопка останется на своем месте (я имею в виду под последним элементом в списке)

Спасибо за любую помощь...


person ABS    schedule 04.05.2014    source источник


Ответы (2)


Измените макет на следующий:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:align_parentTop="true"   ← ← ← ← ←
        android:layout_weight="1"  ← ← ← ← ←
        android:id="@+id/android:list"
        android:layout_width="match_parent"
        android:layout_height="0dp" >
    </ListView>

    <TextView
        android:id="@+id/android:empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/myListEmpty" />

    <Button
        android:layout_weight="0" ← ← ← ← ←
        android:align_parentBottom="true"  ← ← ← ← ←
        android:id="@+id/btnMoreItemsLoad"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/android:list
        android:text="@string/moreItems" />

</RelativeLayout>
person Shehabic    schedule 04.05.2014
comment
спасибо, но есть предупреждение об этом: layout_weight Недопустимый параметр макета в RelativeLayout: layout_weight - person ABS; 04.05.2014

попробуйте этот код

    <TextView
        android:id="@+id/android:empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/myListEmpty" />

    <ListView
        android:id="@+id/android:list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/android:empty"
        android:layout_marginTop="5dp" >
    </ListView>

    <Button
        android:id="@+id/btnMoreItemsLoad"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
       android:layout_below="@+id/android:list"
        android:text="@string/moreItems" />

</RelativeLayout>
person Meghna    schedule 04.05.2014
comment
Спасибо... но в моем коде нет существенных изменений! Вы добавляете только layout_marginTop=5dp в ListView. Вы были уверены, что это должно решить!? Я пробую это, это не решает проблему... - person ABS; 04.05.2014
comment
Не только верхнее поле, я добавил layout:ниже в список также ... насколько я понимаю, это должно работать - person Meghna; 04.05.2014
comment
Я пробую это, но не работает! На самом деле показан только один из них ( ListView и TextBox )! Если в списке нет элементов, ListView скрыт, а в противном случае, если список не пуст, TextBox будет скрыт! - person ABS; 04.05.2014
comment
Так что нет необходимости добавлять layout_below в ListView! - person ABS; 04.05.2014
comment
Дайте высоту для просмотра списка, например layout-height = 50dp - person Meghna; 04.05.2014