2012-05-08 2 views
2

Avez-vous parcouru ce site pour toutes les réponses, pas vraiment de solution facile que j'ai trouvé pour cela. Je crée une application Android qui utilise une base de données sqlite pour rechercher une valeur hexadécimale par le nom de la couleur saisie. Je crée dynamiquement un TextView, définissant sa couleur de texte et de texte, puis l'ajoutant à ArrayList, puis ArrayList est en cours ajouté à ListView. Le texte apparaît dans ListView, mais sa propriété de couleur n'est pas définie. J'aimerais vraiment trouver un moyen d'obtenir la couleur du texte pour chaque élément listview. Voici mon code jusqu'ici:Définir la couleur du texte d'une vue de texte dans un élément listview? (Android)

Variables de classe:

private ListView lsvHexList; 

private ArrayList<String> hexList; 
private ArrayAdapter adp; 

En onCreate():

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.color2hex); 

    lsvHexList = (ListView) findViewById(R.id.lsvHexList); 

    hexList = new ArrayList<String>(); 

Dans mon gestionnaire de bouton:

public void btnGetHexValueHandler(View view) { 

    // Open a connection to the database 
    db.openDatabase(); 

    // Setup a string for the color name 
    String colorNameText = editTextColorName.getText().toString(); 

    // Get all records 
    Cursor c = db.getAllColors(); 

    c.moveToFirst(); // move to the first position of the results 

    // Cursor 'c' now contains all the hex values 
    while(c.isAfterLast() == false) { 

     // Check database if color name matches any records 
     if(c.getString(1).contains(colorNameText)) { 

      // Convert hex value to string 
      String hexValue = c.getString(0); 
      String colorName = c.getString(1); 

      // Create a new textview for the hex value 
      TextView tv = new TextView(this); 
      tv.setId((int) System.currentTimeMillis()); 
      tv.setText(hexValue + " - " + colorName); 
      tv.setTextColor(Color.parseColor(hexValue)); 

      hexList.add((String) tv.getText()); 

     } // end if 

     // Move to the next result 
     c.moveToNext(); 

    } // End while 

    adp = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, hexList); 
    lsvHexList.setAdapter(adp); 


    db.close(); // close the connection 
    } 

Répondre

3

Vous n'êtes pas ajouterez la créé TextView à la liste du tout, vous ajoutez simplement la chaîne à la liste, peu importe la méthode que vous avez appelée sur le TextVi ew:

 if(c.getString(1).contains(colorNameText)) { 
     // ... 
     TextView tv = new TextView(this); 
     tv.setId((int) System.currentTimeMillis()); 
     tv.setText(hexValue + " - " + colorName); 
     tv.setTextColor(Color.parseColor(hexValue)); 

     hexList.add((String) tv.getText()); // apend only the text to the list 
     // !!!!!!!!!!!!!! lost the TextView !!!!!!!!!!!!!!!! 
    } 

Ce que vous devez faire est de stocker les couleurs dans un autre tableau, et lors de la création de la vue de la liste réelle, définissez la couleur de chaque TextView en fonction de la valeur appropriée dans la liste.

Pour ce faire, vous devrez étendre ArrayAdapter et ajouter la logique de la couleur TextView à l'intérieur.

+0

Ça sonne bien. Comment cela ressemblerait-il au code? Kinda un programmeur débutant ici. = P –

+0

Je n'ai pas d'exemple ListAdapter pour l'instant, mais voir le lien ci-dessous pour étendre BaseAdapter, l'idée est à peu près la même: https://github.com/BinyaminSharet/Icelandic-Memory-Game/blob/master /src/com/icmem/game/BoardGridAdapter.java – MByD

+0

Pas vraiment utile. Quelqu'un d'autre? –

Questions connexes