Невозможно заполнить представление списка пользовательскими строками, когда компонент находится над представлением списка. - PullRequest
0 голосов
/ 01 июля 2011

У меня проблемы с ListView, использующим пользовательские строки, загружаемые из базы данных.

Если для экрана со списком я помещаю кнопку над ListView, видимые строки в представлении списка не отображаются.

Однако, как только я удаляю кнопку, все работает нормально. Я хочу, чтобы кнопка (или любой другой компонент) отображалась выше, чтобы сделать ее более удобной для пользователя. Ниже приведены два примера кода.

Это XML-файл действия ListView, который работает:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="@color/real_red_dark">
  <LinearLayout
    android:id="@+id/llMain"
    android:layout_height="fill_parent"
    android:background="@drawable/real_background"
    android:layout_width="fill_parent"
    android:layout_gravity="center"
    android:gravity="center">
        <ListView 
            android:id="@+android:id/list"      
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_below="@+id/llButton"
            android:layout_alignParentLeft="true" />        
        <TextView
            android:id="@+android:id/empty"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="@string/no_sessions"
            android:textStyle="bold" 
            android:textSize="18dp" 
            android:gravity="center"/>
    </LinearLayout>
</LinearLayout>

Однако, если у меня есть кнопка, добавленная над ней, она не будет отображаться вообще:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="@color/real_red_dark">
  <LinearLayout
    android:id="@+id/llMain"
    android:layout_height="fill_parent"
    android:background="@drawable/real_background"
    android:layout_width="fill_parent"
    android:layout_gravity="center"
    android:gravity="center">
                <Button 
        android:id="@+id/btnSearch"
        android:layout_width="fill_parent"
        android:layout_height="35dip"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="3dip"
        android:layout_marginLeft="15dip"
        android:layout_marginRight="15dip"
        android:text="Find Sessions"
        android:textStyle="bold" />
        <ListView 
            android:id="@+android:id/list"      
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_below="@+id/llButton"
            android:layout_alignParentLeft="true" />        
        <TextView
            android:id="@+android:id/empty"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="@string/no_sessions"
            android:textStyle="bold" 
            android:textSize="18dp" 
            android:gravity="center"/>
    </LinearLayout>
</LinearLayout>

Ответы [ 3 ]

0 голосов
/ 01 июля 2011

Вы можете попробовать добавить кнопку программно в виде заголовка в самом виде списка, а не в макете xml.

использовать listView.addHeaderView (View)

http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View)

0 голосов
/ 01 июля 2011

Что-то, что выглядит не так, но я предполагаю, что это просто опечатка в вышеприведенном ...

android:id="@+android:id/list"

... не должно быть + между @ и android:. Использование @+ предназначено для добавления нового собственного идентификатора ресурса, то есть @+id:. Вы также делаете то же самое для TextView ...

android:id="@+android:id/empty"

Другое дело, но не уверен, что это уместно, вы указываете ...

android:layout_below="@+id/llButton"

... Я сомневаюсь, что это проблема, поскольку android:layout_below недопустимо для LinearLayout (это для RelativeLayout), но в вашем макете нет кнопки с идентификатором llButton. Если это так, + также будет неправильным, поскольку вы должны указывать существующий идентификатор.

Не уверен, что внесение поправок в вышеперечисленное исправит ситуацию, но может случиться так, что из-за этих проблем инфляция макета выходит «неправильно».

0 голосов
/ 01 июля 2011

Лучше, если вы используете RelativeLayout, чем LinearLayout, также рекомендуется документами android. Попробуйте использовать значение android: layout_height в качестве «wrap_content» для ListView и TextView (которое вы можете использовать для указания пустых строк),может помочь вам.

...