2010-06-10 11 views
51

Mam niestandardowy widok listy i chcę, aby tło listy było białe, więc robię coś takiego, co działa świetnie.Przewijanie listView zmienia wszystko od białego do czarnego

listView = (ListView) this.findViewById(R.id.listview); 
listView.setBackgroundColor(Color.WHITE); 

Problem polega na tym, że podczas przewijania listy tło wszystkich elementów listy zmienia się na czarne, co wygląda okropnie.

Próbowałem w widoku listy ustawiając kolor tła na biały. Kiedy nadmuchać pogląd Próbowałem również ustawienie koloru tła na białym:

view.setBackgroundColor(Color.WHITE); 

Oba rozwiązać problem przewijania kolor tła, ale teraz pozycja nie wydaje się być klikalny mimo to jest. Mam na myśli to, że onClick nadal działa dobrze, ale tło nie miga na pomarańczowo, aby użytkownik wiedział, że go kliknął.

Jak mogę mieć białe tło w widoku listy, które pozostaje białe podczas przewijania, a czy na pomarańczowym tle kliknięcia działa normalnie?

Dzięki!

Odpowiedz

118

Rozwiązanie jest bardzo proste, musisz także ustawić wskazówkę dotyczącą koloru pamięci podręcznej na biały: setCacheColorHint(Color.WHITE). Nie trzeba zmieniać koloru tła elementów listy.

+1

To działało idealnie. listView = (ListView) this.findViewById (R.id.listview); listView.setBackgroundColor (Color.WHITE); listView.setCacheColorHint (Color.WHITE); – pcm2a

+36

listView.setCacheColorHint (Kolor.PRZEZROCZYSTY); lub android: cacheColorHint = "# 00000000" // Ponowne użycie koloru tła – CelinHC

+0

Transparent nie działa, biały zrobił – max4ever

6

Rozwiązanie jest bardzo proste, należy również ustawić wskazówkę dotyczącą koloru pamięci podręcznej na czarny w formacie xml.

android:cacheColorHint="#000000" 
7
ListView lv = getListView(); 
setCacheColorHint(0); 

Ustaw wskazówkę koloru cache do zera.

+0

To jest ten! –

3

Android próbuje poprawić wydajność przewijania ListView poprzez buforowanie informacji o układzie. Jeśli masz długie przewijane listy danych, powinieneś również ustawić właściwość android: cacheColorHint w deklaracji ListView w definicji AXML działania (na tę samą wartość koloru, co tło niestandardowego układu wiersza). Niewłączenie tej wskazówki może spowodować "migotanie", gdy użytkownik przewinie listę z niestandardowymi kolorami tła wiersza. Podaj ten sam kolor dla tła listit i androida: cacheColorHint.Możesz odnieść się do poniższego kodu.

W moim układzie Adapter dałem jako

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/ADAPTER_CONTAINER_PRIMARY" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#FAFAEE" 
android:layout_marginLeft="5dp" 
android:layout_marginRight="5dp" 
android:gravity="center"> 
    ..... 

A w widoku listy

<ListView 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:id="@+id/LIST_GRID_LIST_INSTANCES" 
      android:focusableInTouchMode="true"  
      android:smoothScrollbar="true" 
      android:divider="@drawable/Gray" 
      android:dividerHeight="0.05dp" 
      android:cacheColorHint="#FAFAEE" 
      android:background="@drawable/round"/> 
+0

Świetne wyjaśnienie – Sababado

Powiązane problemy