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