Comment définir la couleur d'arrière-plan de l'individu gridview cellules
J'ai un GridView avec chaque cellule contenant du texte, et je veux être en mesure de régler la couleur de fond des cellules individuelles.
Le XML pour ma GridView est:
<GridView android:id="@+id/students_grid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="6"
android:gravity="center"
android:stretchMode="columnWidth">
</GridView>
Le code de mon GridView est:
GridView gridView = (GridView) findViewById(R.id.students_grid);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, student_array);
gridView.setAdapter(adapter);
J'avais espéré que je serais en mesure de régler la couleur de fond des cellules individuelles à l'aide de:
gridView.getChildAt(random_student).setBackgroundColor(Color.parseColor("#18A608"));
Toutefois, cela lève une exception de pointeur null, et sur la poursuite de l'examen, il semble que le contrôle gridview.getChildCount() renvoie 0. J'ai vu que gridview.getCount retourne le nombre d'éléments dans le contrôle gridview correctement, mais cela ne m'aide pas à définir la couleur de fond des cellules individuelles.
Des idées où je la prochaine?
OriginalL'auteur Mark__C | 2012-10-14
Vous devez vous connecter pour publier un commentaire.
La clé pour résoudre ce problème est de comprendre d'abord comment
ListView
etGridView
travail.GridView
crée et détruit les vues enfant comme vous le faites défiler vers le haut et vers le bas. Si vous ne pouvez pas voir un élément dans unGridView
qui signifie qu'il n'existe pas de vue d'enfant pour elle, il sera créé lorsque l'utilisateur fait défiler.GridView
utilise unAdapter
pour créer les vues etGridView
recycle les points de vue quand ils vont à l'écran et vous demande de l'Adaptateur à la réutilisation, le recyclage des vues de nouveaux points de vue qui viennent sur l'écran. LeAdapter
généralement gonfle une ressource mise en page pour créer de nouveaux points de vue.Ce que cela signifie est que
GridView
appelleragetView(...)
sur leAdapter
à chaque fois qu'il veut afficher une vue d'enfant sur l'écran, il peut passer un recyclés VueconvertView
.La solution est de remplacer
getView(...)
, appelez super pour laisser leAdapter
créer et peupler la vue avec les données de laString
tableau normalement, mais ajouter un peu de code à la fin avant de nous donner la vue arrière deGridView
qui définit la couleur de la vue.OriginalL'auteur satur9nine
Activité principale où vous avez à créer la matrice de code de couleur hexadécimal et et passer à la coutume adaptateur classe
Dans la coutume adaptateur code sera comme ça où le code couleur sera analysée
OriginalL'auteur Suhas
Vous avez besoin pour créer une mise en page personnalisée et à utiliser dans votre carte à la place de
android.R.layout.simple_list_item_1
. Par exemple:(J'ai simplement copié la dernière version de
simple_list_item_1.xml
et ajouté une nouvelle couleur d'arrière-plan à la fin.)L'enregistrer comme
grid_layout.xml
dansres/layout
et le changement de votre adaptateur constructeur:(Désolé, je viens de trouver votre réponse.) Oui, mais vous ne voulez à mettre en évidence une seule cellule ou toutes les cellules qui correspond à l'un des critères (comme chaque troisième cellule ou à chaque élève, qui est un échec)?
oui, remplacer BaseAdapter comme suggéré dans le SDK.
OriginalL'auteur Sam