J'ai créé une liste spécifique qui existe à partir des éléments suivants pour créer une liste déroulante avec chaque ligne contenant une image à gauche et du texte à droite:
Pour commencer avec une mise en page "racine":
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="#C8C8C8"
>
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"/>
<ListView
Android:id="@Android:id/list"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:drawSelectorOnTop="false"
Android:divider="#C8C8C8"
Android:background="#C8C8C8"/>
</LinearLayout>
puis, dans ListView, je place l'élément "row" suivant:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:background="@drawable/bg_row"
>
<ImageView
Android:layout_width="wrap_content"
Android:paddingLeft="10px"
Android:paddingRight="15px"
Android:paddingTop="5px"
Android:paddingBottom="5px"
Android:layout_height="wrap_content"
Android:src="@drawable/bg_image"
/>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:paddingTop="5px"
Android:paddingBottom="5px"
Android:textSize="16sp"
Android:textColor="#000000"
Android:layout_gravity="center"
Android:maxHeight="50px"/>
</LinearLayout>
Tant que l'écran est affiché de manière statique (comme dans aucun mouvement), il sera affiché correctement, mais lorsque je commence à faire défiler la liste, l'arrière-plan de l'élément de ligne (une "icône", comme indiqué dans le code) sera affiché. s'affiche correctement, mais l'arrière-plan de la disposition "racine" deviendra complètement noir ... lorsque le défilement s'arrête, l'arrière-plan retrouve la plupart du temps sa couleur ... Lors de mon test, j'ai également ajouté un TextView
dans cet élément racine avec le même arrière-plan, celui-ci conservera sa couleur lorsque la liste défilera ... Vous avez une idée du pourquoi, et comment résoudre ce problème?
Ajouter un attribut à la balise ListView
Android:cacheColorHint="#00000000" // setting transparent color
Pour plus de détails, consultez ce blog
C'est très simple, utilisez cette ligne dans votre fichier de mise en page:
Android:scrollingCache="false"
comme ça:
<ListView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:scrollingCache="false"
/>
vous pouvez utiliser comme ceci:
list.setCacheColorHint(Color.TRANSPARENT);
list.requestFocus(0);
Android:id="@Android:id/list"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:drawSelectorOnTop="false"
Android:divider="#C8C8C8"
Android:background="#C8C8C8"
Android:cacheColorHint="#00000000"/>
Nous avons beaucoup d’options pour résoudre ce problème, vous pouvez définir l’arrière-plan transparent via une programmation comme celle-ci.
yourlistview.setCacheColorHint(Color.TRANSPARENT);
ou par xml
Android:cacheColorHint="@Android:color/transparent"
J'utilise des images dans listView
et il devient parfois noir dans le Samsung S4 sans défilement même. C'était une erreur stupide que j'ai faite dans l'adaptateur. Je viens de mettre mon view to null pour résoudre ce problème
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder;
convertView = null; // convert view should be null
if (convertView == null) {
holder = new Holder();
convertView = inflater1.inflate(R.layout.listview_draftreport_item, null);
}
}
Il y a beaucoup de réponses à cette question, mais aujourd'hui, j'ai réalisé que cette question manquait encore d'un élément d'information essentiel.
Il existe deux solutions possibles au problème, les deux fonctionnent, mais chacune d’elles doit être utilisée dans des situations différentes.
Méthodes
Utilisez Android:cacheColorHint
lorsque votre ListView
a un arrière-plan de couleur solide .
<item name="Android:cacheColorHint">@Android:color/transparent</item>
Utilisez Android:scrollingCache
lorsque votre ListView
a une image (complexe) comme arrière-plan.
<item name="Android:scrollingCache">false</item>
Lorsque votre ListView
a un arrière-plan de couleur unie, les deux méthodes fonctionneront, ainsi non seulement le cacheColorHint
fonctionnera. Toutefois, il n'est pas recommandé d'utiliser la méthode scrolingCache
pour les arrière-plans de couleur unie, car elle désactive une méthode d'optimisation utilisée pour une animation et un défilement fluides de ListView.
Remarque pour la remarque:scrolingCache
défini sur false ne signifie pas nécessairement que les animations et le défilement de ListView
deviendront lents.
Dans votre XML où utiliser Listview
set
Android:cacheColorHint="@Android:color/transparent"
Android:cacheColorHint="@Android:color/transparent"
Ce qui suit a fonctionné pour moi:
myListView.setScrollingCacheEnabled(false);
Android:cacheColorHint="#00000000"// setting transparent color
ou
ne pas définir le fond de listview
.