2010-07-05 3 views
3

Есть что-то, чего я просто не получаю, и я ищу помощь в понимании того, что здесь происходит.Custom Listview Adapter, добавляющий статический нижний колонтитул и понимание R.id.list

У меня есть адаптер пользовательского списка (который просто расширяет BaseAdapter), который я успешно использовал для создания и отображения списка. Теперь я хочу добавить статический нижний колонтитул в конец моего списка. Посмотрев на ряде ресурсов (в частности, this one) я пришел к выводу, что мое нежелание использовать XML должен прийти к концу, и установить следующую структуру XML в файле с именем devices_list.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" android:layout_height="wrap_content" 
android:orientation="vertical"> 
<LinearLayout android:id="@+id/bottom_control_bar" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true"> 
    <ToggleButton android:id="@+id/bottom_control_toggle" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textOff="Filter Favourites OFF" 
     android:textOn="Filter Favourites ON"/> 
</LinearLayout> 
<ListView android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_above="@id/bottom_control_bar"> 
</ListView> 
<TextView android:id="@android:id/empty" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/main_empty_list" 
    android:layout_above="@id/bottom_control_bar"/> 
    </RelativeLayout> 

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

@Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     this.setContentView(R.layout.devices_list); 

     db = new DbManager(this); 
     db.open(); 

     AllCur = db.fetchAllDevices(); 
     startManagingCursor(AllCur); 

     list = new DeviceListAdapter(this, AllCur); //make my custom list adapter     
     setListAdapter(list); 
      } 

Есть ли способ связать виджет ListView, объявленный в моем xml, с моим адаптером DeviceList? Теперь мне совершенно ясно, что я не являюсь entir что все работает. Любая помощь в разъяснении будет высоко оценена.

+0

Я столкнулся с подобными проблемами некоторое время назад, и мой адаптер вызвал проблему. Попробуйте просмотреть список и отобразите сначала массив xml, определенный как ресурс, который должен отображаться просто отлично. – Pentium10

+0

Я не совсем уверен, что вы предлагаете здесь - если у меня есть xml-массив, это не помогает мне, поскольку я хочу использовать свой собственный адаптер массива, который использует курсор, который я ему поставлю. Для funsies я помещал XML, который я пытался сделать в примере Notepad (который использует SimpleCursorAdapter и пару XML-массивов), и мой нижний колонтитул не возник. Итак, основываясь на этом, есть ли у вас какие-либо намеки на то, как ваш адаптер вызвал проблему? – Aurora

ответ

1

Вы как ListView и TextView набор для android:layout_above="@id/bottom_control_bar", что означает, что TextView будет перекрывать ListView. И, вы сказали, что высота вашего ListView равна 0dip, что сделает очень короткий список.

Я бы определил ListView как находящийся выше TextView и поставленный на якорь в верхней части экрана (android:layout_alignParentTop="true").

Есть ли какой-нибудь способ, чтобы связать вверх ListView виджет, объявленный в моем XML с моим DeviceListAdapter?

Вы уже являетесь автором номера setListAdapter().

+0

aha! Андроид: layout_alignParentTop = "true" - это то, что он сделал. Я вернулся к моему примеру, удивленный тем, что я пропустил это, и понял, что его там никогда не было. Я думаю, что это потому, что пример, который я использовал, помещает список между заголовком и нижним колонтитулом, в то время как я просто помещаю мой выше нижнего колонтитула. Высота ListView, похоже, не имеет значения после установки выравнивания родительского элемента. – Aurora