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 ListView
android:layout_height
match_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.
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
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
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