2013-02-05 8 views
5

Tak więc, szukałem odpowiedzi na pytanie, które według mnie jest prawdopodobnie niedorzecznym niedopatrzeniem, ale tutaj się udaje.Android: ListView informuje mnie, że jest zapełniony, ale nie wyświetla pozycji

Mam ListView, który zapełniłem ArrayAdapter, który buduję z listy obiektów używam gdzie indziej w mojej aplikacji. Sprawdziłem przez getCount, czy istnieją elementy w adapterze, zarówno przed jak i po wywołaniu .setAdapter(). Nic jednak nie pojawia się w mojej aplikacji.

Główny układ res/layout/playlistview:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/playlist_screen" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1" 
android:background="#80000000" 
android:gravity="center" 
android:orientation="horizontal" > 

<ListView 
    android:id="@+id/playlistview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:divider="#206" 
    android:background="#602" > 

</ListView> 

</LinearLayout> 

(ustawić kolory, więc mogłem zobaczyć, co dzieje się łatwiej)

textview dla każdej pozycji res/layout/singlelistitem:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/single_item" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textSize="16sp" 
    android:padding="5dp" 
    android:background="#206"> 
</TextView> 

i kod, którego używam do zapełnienia:

private ListView playlistView; 

private void buildPlaylistView() { 
playlistView = (ListView)findViewById(R.id.playlistview); 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.singlelistitem, R.id.single_item, playlist.titlesAsArray()); 

playlistView.setAdapter(adapter); 

playlistView.setVisibility(View.VISIBLE); 

adapter.notifyDataSetChanged(); 
((ArrayAdapter<String>)playlistView.getAdapter()).notifyDataSetChanged(); 
} 

playlist.titlesAsArray() powraca String[] i działa.

Mam oba .notifyDataSetChanged() tam, ponieważ znalazłem to na SO i spróbowałem.

Kiedy zmienić android:layout_height w obiekcie ListView w moim XML do wrap_content, widzę tylko nieprzezroczyste tło, które jest w LinearLayout że otacza go. Kiedy ustawiam ListViewandroid:layout_height na match_parent, cały ekran jest #206 (magentish).

Kiedy sprawdzam getCount() na adapterze przed setAdapter(), oznacza to, że istnieją elementy. Kiedy sprawdzam to po, z samego widoku, mówi, że jest ta sama liczba elementów. Jestem całkowicie zagubiony na tym, ale nic nie jest wyświetlane.

+0

Właśnie sprawdziłem i działa poprawnie. Podejrzewam, że coś innego miesza się z 'playlistView' po wywołaniu' buildPlaylistView(); 'i skutecznie resetuje jego zawartość i/lub adapter. To po prostu nie w kodzie, który napisałeś. – andr

+0

Jedyne co robię na liście playlistView global to wywołanie bringToFront(), a skomentowanie tego nie spowodowało niczego. Ustawiam także widoczność, unieważniam, aby wymusić odświeżanie i wykonuję animacje w widoku połączonym z id/listą_list (zewnętrzny układ). – Kimo

+0

cóż ... nie wiem. wgraj cały projekt, jeśli możesz. bez tego to tylko zgadywanie. tak jak powiedziałem - wyśmiałem 'playlist.titlesAsArray()', aby zwrócić statyczne dane, uruchomić je na prawdziwym urządzeniu i działało na nim grzywna. W porządku, mam na myśli to, że pokazał wszystkie elementy w adapterze z odpowiednimi kolorami itp. Można również podać więcej wskazówek - jakiego API używasz? czy uruchamiasz to na emulatorze lub urządzeniu? wszystko może mieć znaczenie tutaj ... – andr

Odpowiedz

2

Spróbuj zmienić z android:orientation="horizontal" na android:orientation="vertical", co może rozwiązać.

+0

Nie działa, ale prowadzi mnie do pytania, czy ListView nie może być poziomy? Reszta mojej aplikacji jest pozioma, dlatego właśnie tam była (odtwarza wideo w formacie poziomym). – Kimo

+0

W przypadku listview nie możemy ustawić orientacji, w poście, o której wspomniałem o orientacji widoku rodzica. Mam wątpliwości, że obiekty są renderowane, ale zostają ukryte z powodu układu. –

+0

Dzięki za to, usunąłem orientację (i wypróbowałem tuzin innych rzeczy) – Kimo

Powiązane problemy