IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Colorer certains éléments d'une array adapter


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 154
    Par défaut Colorer certains éléments d'une array adapter
    Bonjour a tous, voilà j'ai actuellement un bouton qui me permet de lire un fichier XLS et le me l'afficher dans un popups avec le code suivent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
        private boolean LireFichier(Context context, String fileName) {
            ///Alletre dialogue OK
            AlertDialog.Builder builderSingle = new AlertDialog.Builder(Inter.this);
            builderSingle.setIcon(R.drawable.ordre);
            builderSingle.setTitle("Ordre envoyer jusqu'à présent");
     
     
    ///////////////////////////////////////////////////////
           // Lecture du fichier
            /////////////////Variable
            final int mois = d.getMonth() + 1;
            final int annees = d.getYear() - 100;
            final int jours = d.getDate();
            final String datesok = jours + "." + mois + "." + annees;
     
            // check if available and not read only
            if (!isExternalStorageAvailable() || isExternalStorageReadOnly()) {
                Log.w("FileUtils", "Storage not available or read only");
                return false;
            }
     
            boolean success = false;
     
            //New Workbook
            // Create a path where we will place our List of objects on external storage
            //  File file = new File(context.getExternalFilesDir(null), fileName);
            FileOutputStream os = null;
            FileInputStream file = null;
            try {
                file = new FileInputStream(new File(context.getExternalFilesDir(null), fileName));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
     
            HSSFWorkbook wb = null;
            try {
                wb = new HSSFWorkbook(file);
            } catch (IOException e) {
                e.printStackTrace();
            }
            // Workbook wb = new HSSFWorkbook();
     
            Cell c = null;
     
            //New Sheet
            HSSFSheet sheet1 = wb.getSheetAt(0);
     
            // Generate column headings
            int rownum = sheet1.getLastRowNum()+1;
            //////////////////////////////
            //Update the value of cell
     
            //  Row row = sheet1.getRow(0);
            //  row.createCell(3).setCellValue("Value 2");
            /////////////////////////////////
            Row row = sheet1.createRow(rownum);
            //Row row1 = sheet1.createRow(1);
    ////////////////////////////////////////////////A faire Ici
            ///Conteur du nombre de cell
            int counter =0;
            //String Cellule(counter);
            Iterator<Row> rowIter = sheet1.rowIterator();
            ArrayList<String> ArrayFichier=new ArrayList<String>();
            final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, ArrayFichier);
           // liste.setAdapter(adapter);
    ///////Fin de la créatuon de la listeview
            while (rowIter.hasNext()) {
                ArrayList<String> ArrayLigne=new ArrayList<String>();
                //Création de la row
                HSSFRow myRow = (HSSFRow) rowIter.next();
                //HSSFRow test =(HSSFRow) rowIter.next()+1;
                Iterator<Cell> cellIter = myRow.cellIterator();
     
                while (cellIter.hasNext()) {
     
                    HSSFCell myCell = (HSSFCell) cellIter.next();
                    Log.w("FileUtils", "Cell Value: " + myCell.toString());
                    //////////////////////ajouter les 4 premiere cellule dans la ligne
                    if(counter < 4){
                        ArrayLigne.add (String.valueOf(myCell));
                        counter++;
                    }else{
                        //Compter les 11 autre et ne rien faire avec
                        if(counter < 11){
                            counter++;
                        }else{
                            ArrayFichier.add (String.valueOf(ArrayLigne));
                            counter =0;
                        }
     
                    }
     
                }
     
            }
     
            ////////////////////////////////////////////////
            //Affichage du popup
            builderSingle.setNegativeButton(
                    "fermer",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    });
     
            builderSingle.setAdapter(
                    (ListAdapter) adapter,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            String strName = adapter.getItem(which);
                            AlertDialog.Builder builderInner = new AlertDialog.Builder(
                                    Inter.this);
                        }
                    });
            builderSingle.show();
     
     
            return success;
        }
    tous ceci fonctionne très bien mais maintenant je voudrait savoir si il est possible de colorer le texte afficher d'une ou plusieurs ligne défini avec couleur spécifique... est ce que dans l'arrayadaper il y a une option comme ceci?

    Merci d'avance pour votre aide!

  2. #2
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Il te faut créer une sous-classe de ArrayAdapter et redéfinir la méthode getView() pour gérer ton cas spécifique.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 476
    Par défaut
    Je dirais même plus, dans l'adapter personnalisé que tu devra créer, il faudra surcharger 2 méthodes :
    public int getItemViewType(int position)
    pour préciser les conditions des différents types de vue
    et
    public int getViewTypeCount()
    pour indiquer le nombre de vue différentes. Pas le nombre de ligne de la liste mais le nombre de couleurs différentes dans ton cas

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 154
    Par défaut
    Merci pour vos réponses!!

    Alors je suis débutant en dev donc si je comprend bien avec la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int getItemViewType(int position)
    Je sélectionner le numéro de la ligne que je veux "colorier"!,

    Et avec la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int getViewTypeCount()
    je définir les changement que je souhaite affecter!?


    En gros pour ma situation precise je voudrait que tous le texte sois afficher de manière "normal text noir fond blanc" et que les lignes contenant le.mot quittancé sois affiché en rouge!!

    Donc la je fait un if par exemple pour tester toutes mes lignes et que si il y a un quittance je note le numéro de la ligne, je note cette/ces lignes dans la première ligne de code jusqu'à ici je comprends mais pour la deuxième j'ai du mal à comprendre à comprendre comment définir les changement de mon array dans cette ligne...

    Merci d'avance pour vos éclairage!

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 476
    Par défaut
    Non, c'est pas ca du tout. getViewTypeCount() renvoie le nombre de vues différentes dans ta liste, dans ton cas 2 (car tu as des textes en normal noir fond blanc, et textes en rouge), et dans getItemViewType, tu définis la condition.

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     @Override
        public int getItemViewType(int position) {
            if (getItem(position).contains("quittancé")) {
                        return 1;
                    } else {
                    return 0;
                }
        }
     
        @Override
        public int getViewTypeCount() {
            return 2;
        }
    Tu crées un layout qui représente la vue des items (dans ton cas un simple textview avec fond blanc).
    puis dans ta méthode getView,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
      @Override
        public android.view.View getView(int position, View convertView, ViewGroup parent) {
            int i = getItemViewType(position);
           
                if (convertView == null) {
    
                    convertView = android.view.LayoutInflater.from(context).inflate(
                            ton_layout_item, parent, false);
                }
    
            TextView text = ViewHolder.get(convertView, R.id.monTexte);
            text.setText(getItem(position);
            
            if (i == 1) {
             text.setTextColor(Color.RED);
            }
            return convertView;
        }
    J'ai recopié ca vite fait d'un adapter de recycleview, donc y a p'tet qq différences, mais voila comment ca marche. Regarde comment faire un custom adapter, comme ici (http://www.piwai.info/android-adapter-good-practices), puis tu surcharges les 2 méthodes citées. Si tu rentres la condition uniquement dans la getView sans surcharger les 2 méthodes (car elles sont facultatives), ca va marcher jusqu'à ce que tu t'amuses à scroller ta liste. Et là ton texte va devenir rouge aléatoirement sur d'autres lignes.

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 154
    Par défaut
    Magnifique tu est un chef!

    je commence petit a petit a comprendre!

    maintenant j'ai un souci par ce que je n'ai pas une simple array toute créer je la compose grâce a un clique sur un bouton qui va lire un fichier xls voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
        private boolean LireFichier(Context context, String fileName) {
            ///Alletre dialogue OK
            final AlertDialog.Builder builderSingle = new AlertDialog.Builder(Inter.this);
            builderSingle.setIcon(R.drawable.ordre);
            builderSingle.setTitle("Ordre envoyer jusqu'à présent");
     
     
    ///////////////////////////////////////////////////////
           // Lecture du fichier
            /////////////////Variable
            final int mois = d.getMonth() + 1;
            final int annees = d.getYear() - 100;
            final int jours = d.getDate();
            final String datesok = jours + "." + mois + "." + annees;
     
            // check if available and not read only
            if (!isExternalStorageAvailable() || isExternalStorageReadOnly()) {
                Log.w("FileUtils", "Storage not available or read only");
                return false;
            }
     
            boolean success = false;
     
            //Création du fichier excel
            FileOutputStream os = null;
            FileInputStream file = null;
            try {
                file = new FileInputStream(new File(context.getExternalFilesDir(null), fileName));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
     
            HSSFWorkbook wb = null;
            try {
                wb = new HSSFWorkbook(file);
            } catch (IOException e) {
                e.printStackTrace();
            }
            Cell c = null;
            HSSFSheet sheet1 = wb.getSheetAt(0);
            // trouver la derniere row
            int rownum = sheet1.getLastRowNum()+1;
            Row row = sheet1.createRow(rownum);
            ///Conteur du nombre de cell
            int counter =0;
            Iterator<Row> rowIter = sheet1.rowIterator();
            ArrayList<String> ArrayFichier=new ArrayList<String>();
            final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, ArrayFichier);
    ///////Fin de la créatuon de la listeview
            while (rowIter.hasNext()) {
                ArrayList<String> ArrayLigne=new ArrayList<String>();
                //Création de la row
                HSSFRow myRow = (HSSFRow) rowIter.next();
                //HSSFRow test =(HSSFRow) rowIter.next()+1;
                Iterator<Cell> cellIter = myRow.cellIterator();
     
     
     
                while (cellIter.hasNext()) {
     
                    HSSFCell myCell = (HSSFCell) cellIter.next();
                    Log.w("FileUtils", "Cell Value: " + myCell.toString());
                    //////////////////////ajouter les 4 premiere cellule dans la ligne
                    if(counter < 4){
                        ArrayLigne.add (String.valueOf(myCell));
                        counter++;
                    }else{
                        //Compter les 11 autre et ne rien faire avec
                        if(counter < 11){
                            counter++;
                        }else{
                            ArrayFichier.add (String.valueOf(ArrayLigne));
                            counter =0;
                        }
     
                    }
     
                }
     
            }
     
            ////////////////////////////////////////////////
            //Affichage du popup
            builderSingle.setNegativeButton(
                    "fermer",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    });
     
     
            builderSingle.setAdapter(
     
                    (ListAdapter) adapter,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
     
                            String strName = adapter.getItem(which);
                            AlertDialog.Builder builderInner = new AlertDialog.Builder(
                                    Inter.this);
                        }
                    });
           // builderSingle.setBackgroundColor(Color.GREEN);
            builderSingle.show();
     
     
            return success;
        }
    et plus precisement ce bout ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
                while (cellIter.hasNext()) {
     
                    HSSFCell myCell = (HSSFCell) cellIter.next();
                    Log.w("FileUtils", "Cell Value: " + myCell.toString());
                    //////////////////////ajouter les 4 premiere cellule dans la ligne
                    if(counter < 4){
                        ArrayLigne.add (String.valueOf(myCell));
                        counter++;
                    }else{
                        //Compter les 11 autre et ne rien faire avec
                        if(counter < 11){
                            counter++;
                        }else{
                            ArrayFichier.add (String.valueOf(ArrayLigne));
                            counter =0;
                        }
     
                    }
     
                }
    en gros je récupéré les 4 cellule que je veux afficher de chaque ligne pour les placer dans ArrayLigne puis après avoir laisser les autre cellules sans importance je place cette ligne dans mon arrayFichier.

    est ce que je voudrait moi c'est de colorier uniquement l'ArrayLigne si une des quatre cellule contient quittancé...

    est ce que c'est fesable? car apres je met le toute dans l'arrayfichier...

    Merci d'avance pour ton aide précieuse!

Discussions similaires

  1. Appliquer une bordure et un fond coloré à certains éléments
    Par laurentSc dans le forum Mise en page CSS
    Réponses: 14
    Dernier message: 19/11/2015, 13h48
  2. Récupération de certains éléments d'une BDD
    Par DaisyVIP dans le forum ASP.NET
    Réponses: 27
    Dernier message: 08/06/2007, 15h20
  3. Réponses: 4
    Dernier message: 24/05/2007, 16h37
  4. Réponses: 2
    Dernier message: 29/03/2007, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo