2013-02-05 9 views
5

Quindi ho cercato su Google e ho setacciato SO per una risposta a ciò che penso sia probabilmente una supervisione ridicola, ma qui va.Android: ListView mi dice che è popolato ma non visualizza gli articoli

Ho un ListView che sto compilando con un ArrayAdapter che sto costruendo da un elenco di oggetti che sto utilizzando altrove nella mia applicazione. Ho controllato tramite getCount che ci sono elementi nell'adattatore, sia prima che dopo chiamo .setAdapter(). Nulla è presente nella mia applicazione tuttavia.

mio layout principale 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> 

(ho impostato i colori così ho potuto vedere quello che sta succedendo più facilmente)

la textview per ogni elemento 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> 

e il codice che uso per popolare:

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() restituisce String[] e funziona.

Ho entrambi del .notifyDataSetChanged() lì, poiché l'ho trovato su SO e ci ho provato.

quando cambio la android:layout_height nell'oggetto ListView nel mio XML per wrap_content, vedo solo lo sfondo opaco che è nella LinearLayout che lo avvolge. Quando imposto lo ListViewandroid:layout_heightmatch_parent, l'intero schermo è #206 (magenta).

Quando controllo lo getCount() sull'adattatore prima di setAdapter(), dice che ci sono voci. Quando lo controllo dopo, dalla vista stessa, si dice che ci sono lo stesso numero di elementi. Sono completamente perso su questo, ma non viene visualizzato nulla.

+0

Ho appena controllato e funziona bene. Sospetto che qualcos'altro abbia a che fare con 'playlistView' dopo la chiamata a' buildPlaylistView(); 'e resettando efficacemente il suo contenuto e/o adattatore. Non è solo nel codice che hai pubblicato. – andr

+0

L'unica cosa che faccio alla playlistViewView è chiamare bringToFront() e commentare non ha fatto nulla. Inoltre, ho impostato la visibilità, invalido per forzare il ridisegno ed eseguire alcune animazioni su una vista collegata all'ID/playlist_screen (il layout esterno). – Kimo

+0

beh ... non lo so. carica l'intero progetto se puoi. senza di esso è solo una supposizione. come ho detto - ho deriso 'playlist.titlesAsArray()' per restituire i dati statici, eseguirli su un dispositivo reale e ha funzionato con una multa. Per intenderci voglio dire che mostrava tutti gli elementi nell'adattatore con colori appropriati, ecc. Potresti anche fornire altri suggerimenti: quale API stai usando? stai eseguendo questo su emulatore o dispositivo? tutto può essere importante qui ... – andr

risposta

2

Provare a cambiare da android:orientation="horizontal" a android:orientation="vertical" questo può risolvere.

+0

Non ha funzionato, ma mi porta a chiedere, può ListView non essere orizzontale? Il resto della mia app è orizzontale, ed è per questo che era lì in quel modo (riproduce video in formato orizzontale) – Kimo

+0

Per listview non possiamo impostare l'orientamento, nel post di cui parlavo sull'orientamento delle viste genitore. Dubito che gli oggetti vengano renderizzati ma che vengano nascosti a causa del layout. –

+0

Grazie per questo, ho rimosso l'orientamento (e provato una dozzina di altre cose) – Kimo

Problemi correlati