Door een ListView te scrollen verandert alles van wit naar zwart

Ik heb een aangepaste lijstweergave en ik wil dat de achtergrond van de lijst wit is, dus ik doe zoiets als dit, wat prima werkt.

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

Het probleem is dat wanneer u door de lijst bladert, de achtergrond van alle lijstitems in zwart verandert, wat er verschrikkelijk uitziet.

Ik heb geprobeerd in mijn lijstweergave de achtergrondkleur in te stellen op wit. Toen ik de weergave opblaasde, probeerde ik ook de achtergrondkleur op wit te zetten:

view.setBackgroundColor(Color.WHITE);

Beide lossen het probleem van de scrollende achtergrondkleur op, maar nu lijkt het item niet aanklikbaar, hoewel dat wel zo is. Wat ik daarmee bedoel is dat de onClick nog steeds goed werkt, maar de achtergrond knippert niet naar oranje om de gebruiker te laten weten dat hij erop heeft geklikt.

Hoe kan ik een witte achtergrond in een lijstweergave hebben, die wit blijft tijdens het scrollen, en heeft de normale lijstactiviteit een oranje klikachtergrond?

Bedankt!


Antwoord 1, autoriteit 100%

De oplossing is heel eenvoudig, je moet ook de cache-kleurhint op wit zetten: setCacheColorHint(Color.WHITE). U hoeft de achtergrondkleur van de lijstitems niet te wijzigen.


Antwoord 2, autoriteit 6%

ListView lv = getListView();
setCacheColorHint(0);

Zet de cachekleurhint op nul.


Antwoord 3, autoriteit 5%

De oplossing is heel eenvoudig, je moet ook de cache-kleurhint in xml op zwart zetten.

android:cacheColorHint="#000000"

Antwoord 4, autoriteit 3%

Android probeert de prestaties van het scrollen in ListView te verbeteren door lay-outinformatie in de cache op te slaan. Als u lange lijsten met gegevens hebt, moet u ook de eigenschap android:cacheColorHint in de ListView-declaratie in de AXML-definitie van de activiteit instellen (op dezelfde kleurwaarde als de achtergrond van uw aangepaste rijlay-out). Als u deze hint niet opneemt, kan dit resulteren in een ‘flikkering’ wanneer de gebruiker door een lijst met aangepaste achtergrondkleuren voor rijen bladert.
Geef dus dezelfde kleur aan de achtergrond van het lijstitem en android:cacheColorHint.u kunt onderstaande code raadplegen.

In mijn Adapter-layout gaf ik als

<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">
     .....

En in de lijstweergave

<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"/>

Antwoord 5

Als je ListViewop een complexere achtergrond is getekend, bijvoorbeeld een bitmap of verloop, moet je de scrollcache mogelijk helemaal uitschakelen. Ik heb uiteindelijk android:scrollingCache="false"ingesteld op mijn ListViewom dit probleem op te lossen.

http://developer.android.com/reference/ android/widget/AbsListView.html#attr_android:scrollingCache

Other episodes