Crunchez vos adresses URL
|
Rejoignez notre discord
|
Hébergez vos photos
Page 2 sur 2 PremièrePremière 12
Affichage des résultats 31 à 53 sur 53
  1. #31
    C'est le moment d'apprendre à utiliser le debugger qui t'aurait mis ça bien en évidence dans la tronche

  2. #32
    Je note !
    Next objectif mettre tout ça en tableau qui fera plus propre, ajouter un compteur de victoire et travailler l'UI.

    Quand ça sera fini, j'aimerais bien mettre un mode 2 joueurs asynchrone (par mail ou un truc du genre).

    Puis mettre ça sur le store, comme un triple A a 60 euros, a moi la célébrité, la drogue et les femmes xD

  3. #33
    Citation Envoyé par Sorkar Voir le message
    Puis mettre ça sur le store, comme un triple A a 60 euros, a moi la célébrité, la drogue et les femmes xD
    Tu nous feras un tuto alors, parce qu'autant coder un peu de java, ça va, autant gérer la célébrité, la drogue et les femmes c'esst déjà un domaine moins maîtrisé ici.

  4. #34
    J'arrive sans doute après la bataille, mais en Java, le site de jm doudou : https://www.jmdoudoux.fr/accueil_java.htm#dej est une référence (de longue date) sur le langage en français.

    Bon courage en tous cas !
    Tu ne le sais pas encore, mais tu es déjà Garcimore!

  5. #35
    Non t'arrive pas après la bataille merci ça a l'air pas mal foutu

    J'ai à peu près fini ma première appli "todo list" ^^ Ça fonctionne, mais je me rend comte que l'UI, c'est aussi un autre métier lol ^^

  6. #36
    Ohhh oui, l'UI , c'est un métier , voire des métiers à part entière !
    en tous cas, cool pour ta todo list, et content que le site te plaise.
    Tu ne le sais pas encore, mais tu es déjà Garcimore!

  7. #37
    Allez je repose ca là au cas où quelqu'un à le courage.

    Tout fonctionne dans mon appli, sauf un truc, j'ai un bouton pour barrer une tache quand elle est terminée. Le bouton barre la tache et annule si on appuis de nouveau dessus, ca ca fonctionne. Mais à la fermeture puis reouverture de l'appli une tache qui était barrée ne l'est plus. Je sauvegarde l'objet "tache" en cliquant sur le bouton mais rien à faire, ca ne mémorise pas.
    Essayé pas mal de truc, rien à faire ca veux pas. Bon alors comme d'hab le code est tres tres moche, beaucoup de redondance etc... je sais. Là je cherche d'abord a fix ca.

    Voici le code de l'activité :
    Code:
    package fr.sorkar.todo;
    
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.util.TypedValue;
    import android.view.Gravity;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.LinearLayout;
    import android.widget.Spinner;
    import android.widget.TextView;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.constraintlayout.widget.ConstraintLayout;
    import androidx.core.content.ContextCompat;
    import java.util.ArrayList;
    import java.util.List;
    import java.io.FileInputStream;
    import java.io.ObjectInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectOutputStream;
    
    public class MainActivity extends AppCompatActivity {
    
        public Spinner importance;
        public EditText titreTache;
        public EditText contenuTache;
        public Button validerTache;
        public Button ajouterTache;
        public ConstraintLayout fenetrePrincipale;
        public List<Tache> listeTache = new ArrayList<>();
        String[] choixSpinner = {"1", "2", "3", "4"};
        ConstraintLayout frameNouvelleTache;
        LinearLayout zoneTache;
        private static final String FILE_NAME = "liste_taches.dat";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            fenetrePrincipale = findViewById(R.id.fenetrePrincipale);
            importance = findViewById(R.id.spinnerImportance);
            titreTache = findViewById(R.id.titreTache);
            contenuTache = findViewById(R.id.contenuTache);
            validerTache = findViewById(R.id.validerTache);
            frameNouvelleTache = findViewById(R.id.frameNouvelleTache);
            zoneTache = findViewById(R.id.zoneTache);
            ajouterTache = findViewById(R.id.ajouterTache);
            ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, choixSpinner);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            importance.setAdapter(adapter);
            validerTache.setVisibility(View.INVISIBLE);
    
            //Chargement de la liste des tache
            try {
                FileInputStream fis = openFileInput(FILE_NAME);
                ObjectInputStream ois = new ObjectInputStream(fis);
                listeTache = (List<Tache>) ois.readObject();
                ois.close();
                fis.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            // Affichage de la liste des taches
            for (Tache tache : listeTache) {
                //Creation d'un linearLayout horizontal avec alignement a droite des elements
                LinearLayout layoutTexTViewTache = new LinearLayout(this);
                layoutTexTViewTache.setOrientation(LinearLayout.HORIZONTAL);
                layoutTexTViewTache.setGravity(Gravity.END);
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                params.setMargins(30, 10, 30, 0);
                layoutTexTViewTache.setLayoutParams(params);
    
                //Creation d'un textView
                TextView nouveauTextView = new TextView(this);
                nouveauTextView.setPadding(40, 20, 0, 20);
                nouveauTextView.setGravity(Gravity.CENTER_VERTICAL);
                nouveauTextView.setText(String.format("%s     %s", tache.getImportance(), tache.getTitreTache()));
                LinearLayout.LayoutParams paramsTextView = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1);
                nouveauTextView.setLayoutParams(paramsTextView);
                nouveauTextView.setHeight(300);
    
                if (tache.getBarre()) {
                    nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() & (Paint.STRIKE_THRU_TEXT_FLAG));
                    sauvegarderListeTaches();
                }
    
                nouveauTextView.setOnClickListener(v -> {
                    zoneTache.setVisibility(View.INVISIBLE);
                    ajouterTache.setVisibility(View.INVISIBLE);
                    frameNouvelleTache.setVisibility(View.VISIBLE);
                    validerTache.setVisibility(View.VISIBLE);
                    importance.setSelection(adapter.getPosition(tache.getImportance()));
                    titreTache.setText(tache.getTitreTache());
                    contenuTache.setText(tache.getContenuTache());
    
                    switch (tache.getImportance()) {
                        case "1": {
                            int color = ContextCompat.getColor(this, R.color.red);
                            layoutTexTViewTache.setBackgroundColor(color);
                            break;
                        }
                        case "2": {
                            int color = ContextCompat.getColor(this, R.color.orange);
                            layoutTexTViewTache.setBackgroundColor(color);
                            break;
                        }
                        case "3": {
                            int color = ContextCompat.getColor(this, R.color.yellow);
                            layoutTexTViewTache.setBackgroundColor(color);
                            break;
                        }
                    }
    
                });
    
                //Creation du bouton barrer
                Button barrer = new Button(this);
                barrer.setBackgroundResource(R.drawable.boutonbarrer);
                LinearLayout.LayoutParams paramsBoutonBarrer = new LinearLayout.LayoutParams(
                        (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()),
                        (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())
                );
                barrer.setLayoutParams(paramsBoutonBarrer);
    
                //Ajout d'un écouteur d'événements "onClick" au bouton "barrer"
                barrer.setOnClickListener(v -> {
                    int indexTache = listeTache.indexOf(tache);
                    if (indexTache >= 0 && indexTache < listeTache.size()) {
                        if (tache.getBarre()) {
                            nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
                            tache.setBarre(false);
                            sauvegarderListeTaches();
                        }
                        else {
                            nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                            tache.setBarre(true);
                            sauvegarderListeTaches();
                        }
                    }
                    sauvegarderListeTaches();
                });
    
                //Creation du bouton supprimer
                Button supprimer = new Button(this);
                supprimer.setBackgroundResource(R.drawable.boutonsupprimer);
                LinearLayout.LayoutParams paramsTailleButton = new LinearLayout.LayoutParams(
                        (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()),
                        (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())
                );
                supprimer.setLayoutParams(paramsTailleButton);
    
                //Ajout d'un écouteur d'événements "onClick" au bouton "supprimer"
                supprimer.setOnClickListener(v -> {
                    int indexTache = listeTache.indexOf(tache);
                    if (indexTache >= 0 && indexTache < listeTache.size()) {
                        listeTache.remove(indexTache);
                    }
                    zoneTache.removeView(layoutTexTViewTache);
                    sauvegarderListeTaches();
                });
    
                //Affichage de tout les elements
                zoneTache.addView(layoutTexTViewTache);
                layoutTexTViewTache.addView(nouveauTextView);
                layoutTexTViewTache.addView(barrer);
                layoutTexTViewTache.addView(supprimer);
    
                switch (tache.getImportance()) {
                    case "1": {
                        int color = ContextCompat.getColor(this, R.color.red);
                        layoutTexTViewTache.setBackgroundColor(color);
                        break;
                    }
                    case "2": {
                        int color = ContextCompat.getColor(this, R.color.orange);
                        layoutTexTViewTache.setBackgroundColor(color);
                        break;
                    }
                    case "3": {
                        int color = ContextCompat.getColor(this, R.color.yellow);
                        layoutTexTViewTache.setBackgroundColor(color);
                        break;
                    }
                }
            }
        }
    
        private void rafraichirZoneTache() {
            ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, choixSpinner);
            zoneTache.removeAllViews(); // Supprime tous les éléments actuellement affichés dans la zone de taches
            for (Tache tache : listeTache) {
                //Creation d'un linearLayout horizontal avec alignement a droite des elements
                LinearLayout layoutTexTViewTache = new LinearLayout(this);
                layoutTexTViewTache.setOrientation(LinearLayout.HORIZONTAL);
                layoutTexTViewTache.setGravity(Gravity.END);
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                params.setMargins(30, 10, 30, 0);
                layoutTexTViewTache.setLayoutParams(params);
    
                //Creation d'un textView
                TextView nouveauTextView = new TextView(this);
                nouveauTextView.setPadding(40, 20, 0, 20);
                nouveauTextView.setGravity(Gravity.CENTER_VERTICAL);
                nouveauTextView.setText(String.format("%s     %s", tache.getImportance(), tache.getTitreTache()));
                LinearLayout.LayoutParams paramsTextView = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1);
                nouveauTextView.setLayoutParams(paramsTextView);
                nouveauTextView.setHeight(300);
    
                if (tache.getBarre()) {
                    nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() & (Paint.STRIKE_THRU_TEXT_FLAG));
                    sauvegarderListeTaches();
                }
    
                nouveauTextView.setOnClickListener(v -> {
    
                    zoneTache.setVisibility(View.INVISIBLE);
                    ajouterTache.setVisibility(View.INVISIBLE);
                    frameNouvelleTache.setVisibility(View.VISIBLE);
                    validerTache.setVisibility(View.VISIBLE);
                    importance.setSelection(adapter.getPosition(tache.getImportance()));
                    titreTache.setText(tache.getTitreTache());
                    contenuTache.setText(tache.getContenuTache());
    
                    switch (tache.getImportance()) {
                        case "1": {
                            int color = ContextCompat.getColor(this, R.color.red);
                            layoutTexTViewTache.setBackgroundColor(color);
                            break;
                        }
                        case "2": {
                            int color = ContextCompat.getColor(this, R.color.orange);
                            layoutTexTViewTache.setBackgroundColor(color);
                            break;
                        }
                        case "3": {
                            int color = ContextCompat.getColor(this, R.color.yellow);
                            layoutTexTViewTache.setBackgroundColor(color);
                            break;
                        }
                    }
    
                });
    
                //Creation du bouton barrer
                Button barrer = new Button(this);
                barrer.setBackgroundResource(R.drawable.boutonbarrer);
                LinearLayout.LayoutParams paramsBoutonBarrer = new LinearLayout.LayoutParams(
                        (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()),
                        (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())
                );
                barrer.setLayoutParams(paramsBoutonBarrer);
    
                //Ajout d'un écouteur d'événements "onClick" au bouton "barrer"
                barrer.setOnClickListener(v -> {
                    int indexTache = listeTache.indexOf(tache);
                    if (indexTache >= 0 && indexTache < listeTache.size()) {
                        if (tache.getBarre()) {
                            nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
                            tache.setBarre(false);
                            sauvegarderListeTaches();
                        }
                        else {
                            nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                            tache.setBarre(true);
                            sauvegarderListeTaches();
                        }
                    }
                    sauvegarderListeTaches();
                });
    
                //Creation du bouton supprimer
                Button supprimer = new Button(this);
                supprimer.setBackgroundResource(R.drawable.boutonsupprimer);
                LinearLayout.LayoutParams paramsTailleButton = new LinearLayout.LayoutParams(
                        (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()),
                        (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())
                );
                supprimer.setLayoutParams(paramsTailleButton);
    
                //Ajout d'un écouteur d'événements "onClick" au bouton "supprimer"
                supprimer.setOnClickListener(v -> {
                    int indexTache = listeTache.indexOf(tache);
                    if (indexTache >= 0 && indexTache < listeTache.size()) {
                        listeTache.remove(indexTache);
                    }
                    zoneTache.removeView(layoutTexTViewTache);
                    sauvegarderListeTaches();
                });
    
                //Affichage de tout les elements
                zoneTache.addView(layoutTexTViewTache);
                layoutTexTViewTache.addView(nouveauTextView);
                layoutTexTViewTache.addView(barrer);
                layoutTexTViewTache.addView(supprimer);
    
                switch (tache.getImportance()) {
                    case "1": {
                        int color = ContextCompat.getColor(this, R.color.red);
                        layoutTexTViewTache.setBackgroundColor(color);
                        break;
                    }
                    case "2": {
                        int color = ContextCompat.getColor(this, R.color.orange);
                        layoutTexTViewTache.setBackgroundColor(color);
                        break;
                    }
                    case "3": {
                        int color = ContextCompat.getColor(this, R.color.yellow);
                        layoutTexTViewTache.setBackgroundColor(color);
                        break;
                    }
                }
            }
        }
    
        public void sauvegarderListeTaches() {
            try {
                FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                oos.writeObject(listeTache);
                oos.close();
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public void NouvelleTache(View view) {
            //rend la frame visible et reinitialise tout les champs
            importance.setSelection(0);
            zoneTache.setVisibility(View.INVISIBLE);
            ajouterTache.setVisibility(View.INVISIBLE);
            titreTache.setText(R.string.titreTache);
            contenuTache.setText(R.string.contenuTache);
            frameNouvelleTache.setVisibility(View.VISIBLE);
            validerTache.setVisibility(View.VISIBLE);
        }
    
        public void EnregistrerTache(View view) {
            String titre = titreTache.getText().toString();
            String contenu = contenuTache.getText().toString();
            String importanceStr = importance.getSelectedItem().toString();
    
            // Vérifier si la tache existe déjà
            boolean tacheExistante = false;
            for (Tache tache : listeTache) {
                if (tache.getTitreTache().equals(titre)) {
                    tache.setImportance(importanceStr);
                    tache.setContenuTache(contenu);
                    titreTache.setText(tache.getTitreTache());
                    contenuTache.setText(tache.getContenuTache());
                    tacheExistante = true;
                    sauvegarderListeTaches();
                    rafraichirZoneTache();
                    frameNouvelleTache.setVisibility(View.INVISIBLE);
                    zoneTache.setVisibility(View.VISIBLE);
                    ajouterTache.setVisibility(View.VISIBLE);
                    break;
                }
            }
    
            // Si la tache n'existe pas, créer une nouvelle tache et l'ajouter à listeTache
            if (!tacheExistante) {
                //Cree une tache selon l'entree saisieTache avec l'importance donnée
                Tache tache = new Tache(importance.getSelectedItem().toString(), titreTache.getText().toString(), contenuTache.getText().toString(), false);
                listeTache.add(tache);
                //Masque la zone nouvelle tache et rend visible la zone d'affichage de toute les taches
                ajouterTache.setVisibility(View.VISIBLE);
                zoneTache.setVisibility(View.VISIBLE);
                frameNouvelleTache.setVisibility(View.INVISIBLE);
    
                //Parcours la liste des taches
                for (int i = 0; i <= listeTache.size(); i++) {
                    //Si on atteint le dernier élément
                    if (i == listeTache.size()) {
                        //Creation d'un linearLayout horizontal avec alignement a droite des elements
                        LinearLayout layoutTexTViewTache = new LinearLayout(this);
                        layoutTexTViewTache.setOrientation(LinearLayout.HORIZONTAL);
                        layoutTexTViewTache.setGravity(Gravity.END);
                        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                        params.setMargins(30, 20, 30, 0);
                        layoutTexTViewTache.setLayoutParams(params);
    
                        //Creation d'un textView
                        TextView nouveauTextView = new TextView(this);
                        nouveauTextView.setPadding(40, 20, 0, 20);
                        nouveauTextView.setGravity(Gravity.CENTER_VERTICAL);
                        nouveauTextView.setText(String.format("%s     %s", tache.getImportance(), tache.getTitreTache()));
                        LinearLayout.LayoutParams paramsTextView = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1);
                        nouveauTextView.setLayoutParams(paramsTextView);
                        nouveauTextView.setHeight(300);
                        //Ajout d'un listener sur le textview
                        nouveauTextView.setOnClickListener(v -> {
                            //Afficher le contenu de la tache quand on clique sur la tache.
                            zoneTache.setVisibility(View.INVISIBLE);
                            ajouterTache.setVisibility(View.INVISIBLE);
                            frameNouvelleTache.setVisibility(View.VISIBLE);
                            ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, choixSpinner);
                            importance.setSelection(adapter.getPosition(tache.getImportance()));
                            titreTache.setText(tache.getTitreTache());
                            contenuTache.setText(tache.getContenuTache());
                        });
    
                        //Creation du bouton barrer
                        Button barrer = new Button(this);
                        barrer.setBackgroundResource(R.drawable.boutonbarrer);
                        LinearLayout.LayoutParams paramsBoutonBarrer = new LinearLayout.LayoutParams(
                                (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()),
                                (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())
                        );
                        barrer.setLayoutParams(paramsBoutonBarrer);
    
                        //Ajout d'un écouteur d'événements "onClick" au bouton "barrer"
                        barrer.setOnClickListener(v -> {
                            int indexTache = listeTache.indexOf(tache);
                            if (indexTache >= 0 && indexTache < listeTache.size()) {
                                if (tache.getBarre()) {
                                    nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
                                    tache.setBarre(false);
                                    sauvegarderListeTaches();
                                }
                                else {
                                    nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                                    tache.setBarre(true);
                                    sauvegarderListeTaches();
                                }
                            }
                            sauvegarderListeTaches();
                        });
    
                        //Creation du bouton supprimer
                        Button supprimer = new Button(this);
                        supprimer.setBackgroundResource(R.drawable.boutonsupprimer);
                        LinearLayout.LayoutParams paramsTailleButton = new LinearLayout.LayoutParams(
                                (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()),
                                (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())
                        );
                        supprimer.setLayoutParams(paramsTailleButton);
    
                        //Ajout d'un écouteur d'événements "onClick" au bouton "supprimer"
                        supprimer.setOnClickListener(v -> {
                            int indexTache = listeTache.indexOf(tache);
                            if (indexTache >= 0 && indexTache < listeTache.size()) {
                                listeTache.remove(indexTache);
                            }
                            zoneTache.removeView(layoutTexTViewTache);
                            sauvegarderListeTaches();
                        });
    
                        //Affichage de tout les elements
                        zoneTache.addView(layoutTexTViewTache);
                        layoutTexTViewTache.addView(nouveauTextView);
                        layoutTexTViewTache.addView(barrer);
                        layoutTexTViewTache.addView(supprimer);
    
                        switch (tache.getImportance()) {
                            case "1": {
                                int color = ContextCompat.getColor(this, R.color.red);
                                layoutTexTViewTache.setBackgroundColor(color);
                                break;
                            }
                            case "2": {
                                int color = ContextCompat.getColor(this, R.color.orange);
                                layoutTexTViewTache.setBackgroundColor(color);
                                break;
                            }
                            case "3": {
                                int color = ContextCompat.getColor(this, R.color.yellow);
                                layoutTexTViewTache.setBackgroundColor(color);
                                break;
                            }
                        }
                    }
                }
                //Enregistrement de la liste des taches
                sauvegarderListeTaches();
            }
        }
    
        //Methode a laisser pour vider la liste de tache manuellement (le bouton a été viré)
        public void ViderListe(View view){
            listeTache.clear();
            sauvegarderListeTaches();
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            sauvegarderListeTaches();
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            try {
                FileInputStream fis = openFileInput(FILE_NAME);
                ObjectInputStream ois = new ObjectInputStream(fis);
                listeTache = (List<Tache>) ois.readObject();
                ois.close();
                fis.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            rafraichirZoneTache();
        }
    
    
    }
    Puis mon objet Tache :
    Code:
    package fr.sorkar.todo;
    
    public class Tache implements java.io.Serializable {
    
        private String importance;
        private String titreTache;
        private String contenuTache;
        private Boolean barre;
    
        public Tache(String importance, String titreTache, String contenuTache, Boolean barre){
            this.importance = importance;
            this.titreTache = titreTache;
            this.contenuTache = contenuTache;
            this.barre = barre;
        }
    
        public String getImportance(){
            return importance;
        }
        public String getTitreTache(){
            return titreTache;
        }
        public String getContenuTache(){
            return contenuTache;
        }
        public Boolean getBarre(){ return barre; }
    
        public void setImportance(String importance) {
            this.importance = importance;
        }
        public void setTitreTache(String titreTache){
            this.titreTache = titreTache;
        }
        public void setContenuTache(String nomTache) {
            this.contenuTache = nomTache;
        }
        public void setBarre(Boolean barre) { this.barre = barre; }
    }
    Si quelqu'un arrive à mettre le doigt sur ce qui merde...
    Citation Envoyé par poneyroux Voir le message
    c'est bien le seul aspect négatif du crack : ça coûte cher.

  8. #38
    Quand tu dis "ça ne mémorise pas", le fichier de sauvegarde n'est pas créé/màj ?
    Si le fichier existe, tu as la valeur attendue pour chaque tâche ?


    Mon java-fu date un peu, en regardant viteuf j'ai une hypothèse :
    dans cette ligne
    Code:
    for (Tache tache : listeTache) {
    est-ce que la variable tache est une copie de la cellule du tableau, ou est-ce que ça pointe sur la cellule du tableau ?
    Dans le premier cas, sur le listener barrer.setOnClickListener, il faudrait faire
    Code:
    listeTache[indexTache].setBarre(<bool>);
    plutôt que
    Code:
    tache.setBarre(<bool>);

  9. #39
    Alors si, les taches sont bien enregistré dans mon fichier, si j'en crée 10, à la réouverture de l'appli ca charge bien le fichier et j'ai bien mes 10 taches. Si je barre une tache avec son bouton correspondant, c'est ok. Mais si je quitte / ouvre, la tache barrée ne l'est plus. Pourtant je sauvegarde bien dans mon fichier dans le onClicListener suivant :

    Code:
    //Ajout d'un écouteur d'événements "onClick" au bouton "barrer"
                barrer.setOnClickListener(v -> {
                    int indexTache = listeTache.indexOf(tache);
                    if (indexTache >= 0 && indexTache < listeTache.size()) {
                        if (tache.getBarre()) {
                            nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
                            tache.setBarre(false);
                            sauvegarderListeTaches();
                        }
                        else {
                            nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                            tache.setBarre(true);
                            sauvegarderListeTaches();
                        }
                    }
                });
    Je suis pas certains de comprendre ce que tu dit mais j'essai ta solution. Edit : Ok, pour repondre a ta question ca pointe vers une copie de la cellule du tableau.
    Dernière modification par Sorkar ; 17/03/2023 à 14h41.
    Citation Envoyé par poneyroux Voir le message
    c'est bien le seul aspect négatif du crack : ça coûte cher.

  10. #40
    Ben non, pas mieux. Pourquoi qu'c'est toujours des trucs aussi cons qui posent de si gros problèmes, hein ?
    Citation Envoyé par poneyroux Voir le message
    c'est bien le seul aspect négatif du crack : ça coûte cher.

  11. #41
    Le problème c'est probablement que tu dupliques ton code mais que tu n'écris pas la même chose.
    Quand tu veux barrer le texte, tu as écrit le code deux fois:
    A la lecture, tu fais:
    nouveauTextView.setPaintFlags(nouveauTextView.getP aintFlags() & (Paint.STRIKE_THRU_TEXT_FLAG));
    Quand tu cliques sur le bouton, tu fais:
    nouveauTextView.setPaintFlags(nouveauTextView.getP aintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
    Alors: Pourquoi tu fais pas la même chose?
    Tu aurais une seule méthode, tu ferais toujours la meme chose, ça serait cohérent.
    Là, tu veux faire | les deux fois.
    Pour corriger, tu me vires ces lignes et tu crées une fonction/méthode, tu l'appelles aux deux endroits, et tu mets bien ton | dedans.

  12. #42
    As-tu commencé à utiliser le debugger pas-à-pas ? Parce que si c'est pas le cas ta réponse se trouve là.

  13. #43
    Bon, ben apres avoir passé une demi heure ce matin a remplacer des | par des & et des & par des |, ca fonctionne. J'ai un peu de mal a comprendre pourquoi ca fonctionnait pas avant et que c'est ok maintenant, mais ca fonctionne.

    Bref, une fois de plus, je constate que si le projet n'est pas longuement réfléchi à l'avance, on se retrouve rapidement avec un code qu'on ne comprend même plus sois même. Alors de là à l'expliquer au autres...

    Je ne sais pas si je vais rajouter une autre fonctionnalité a ce bouzin, c'est déjà assez la foire à la saucisse comme ca. Je pense que je vais me contenter de revoir un peu l'UI et les couleurs histoire d'avoir un truc joli et puis passer sur un autre projet tout neuf.

    Merci pour les courageux qui m'ont aidé (LDICesare, schouffy )

    Et pour te répondre schouffy, je ne comprend pas comment ca fonctionne le debugger, je n'arrive pas à m'en servir
    Citation Envoyé par poneyroux Voir le message
    c'est bien le seul aspect négatif du crack : ça coûte cher.

  14. #44
    Je pense que savoir l'utiliser doit être ta première priorité si tu veux continuer à faire de la programmation, maintenant que tu as déjà bidouillé un peu.
    C'est simple, ça contient toutes les réponses aux questions que tu te poses, et tu vas apprendre beaucoup de choses en l'utilisant.

  15. #45
    Pour ma part j'ai passé 5 ans à coder en java et j'avais pas de débugger, ça m'a jamais gêné. Je pense que c'est un bon outil une fois qu'on a les bases mais que c'est pas la première chose à utiliser.
    Pour comprendre pourquoi ça fonctionnait pas, il faut regarder ce qui se passait:
    Quand tu lisais ton fichier, la valeur affichée était mauvaise.
    Quand tu modifiais la valeur, l'affichage était correct.
    Le code était différent dans les deux cas. Première erreur: Tu devrais avoir appelé le même code. En pratique, quand ça fait une ligne, la plupart des gens s'embètent pas à factoriser, sauf que là, c'est ça qui t'a planté.
    De là, tu regardes les deux code. Y en a un qui marche (|) et un qui marche pas (&).
    Deuxième erreur: Tu as mis le mauvais opérateur.

    Pour ma part, si j'ai un conseil à donner, c'est pas d'utiliser un débugger. C'est bien, les debuggers, mais c'est le truc advanced qui sert dans 10% des cas. Dans 90% des cas, si tu lis ton code, tu trouveras l'erreur tout seul. Sauf que comme tu l'as écrit, tu peux pas le lire toi-même. Tu vas lire ce que tu crois avoir écrit et pas ce que tu as écrit. Donc explique ton code à quelqu'un. Si tu as un chat, par exemple, c'est très bien. Il s'en foutra complètement, mais si tu fais l'effort d'expliquer ce que tu as écrit à quelqu'un qui n'y panne rien, tu verras que -ah c'est bizarre, j'ai pas écrit la même chose que tout à l'heure. Ca m'arrive régulièrement d'expliquer du code à quelqu'un après avoir passé des heures à galérer dessus et de trouver la réponse en demandant à quelqu'un de regarder mon code et en lui disant "regarde, là, ça devrait faire ça et... Oh! je suis un gros *** merci".

  16. #46
    Je prend tout les conseils, merci C'est pas la première fois que je lis ca effectivement. Relever la tete du guidon, un peu.
    Citation Envoyé par poneyroux Voir le message
    c'est bien le seul aspect négatif du crack : ça coûte cher.

  17. #47
    Je suis pas du tout d'accord avec LDiCesare, le debugger c'est tout simplement le premier outil à utiliser quand ton code ne fait pas ce que tu voudrais qu'il fasse et que tu ne comprends pas pourquoi. (même si je partage son avis que expliquer c'est super utile et ça met en lumière des problèmes).
    Déjà en déroulant ton code pas-à-pas tu apprendras des choses dessus supplémentaires par rapport au moment où tu l'as écrit, encore plus si tu es débutant. Ensuite, tu verras très rapidement où tu passes et tu élimineras plein de raisons d'échec possibles ce qui te laissera juste en face du vrai problème. Enfin, tu arrêteras d'être dépendant de la disponibilité d'autres personnes et tu seras autonome dans ton travail (parce que le chat ça marchera moins bien hein), et ça demande aussi beaucoup moins de temps et de discipline d'utiliser le debugger que de réexpliquer from scratch à quelqu'un ou quelque chose.

    En l'occurence, le debugger t'aurait permis de voir que tu passes bien sur setPaintFlags mais que ça ne fait pas ce que tu veux. Donc tu aurais regardé les valeurs que tu passes à cette méthode, et tu aurais très vite compris pourquoi ça ne fonctionne pas.

    J'ajoute que si ton IDE est pas trop nul, c'est en général une touche à appuyer pour lancer ton programme en mode debugger.

  18. #48
    Citation Envoyé par schouffy Voir le message
    J'ajoute que si ton IDE est pas trop nul, c'est en général une touche à appuyer pour lancer ton programme en mode debugger.
    Android Studio.

    Bon je vais demander à mon meilleur pote chatGPT si il peut me faire un tuto sur le debugger

    En tout cas je vous remercie tous encore de vos diverses participations, je sais bien que c'est pas forcement facile de reprendre le code d'un autre, spécialement quand il est débutant, et j'ai des retours plus pertinents et bienveillant ici que sur des forum censé être spécialisés. Vive les canards.

    Pour tenir au courant, j'ai réussi à afficher toutes mes taches dans un scrollview pour pouvoir faire défiler quand la liste est trop longue, j'envisageait de pouvoir les supprimer egalement par un slide vers la droite ou la gauche, mais ca à l'air compliqué à mettre en place sans prendre le risque de tout péter définitivement
    Dernière modification par Sorkar ; 22/03/2023 à 10h06.
    Citation Envoyé par poneyroux Voir le message
    c'est bien le seul aspect négatif du crack : ça coûte cher.

  19. #49
    Bon bah dans la serie "code une appli à la con que tout le monde a fait" je viens de finir de coder une calculatrice.

    Par contre, j'ai du pomper du code ailleurs, j'ai honte mais ca marche. Bien plus compliqué à faire que ce que je n'aurai cru.

    Next ?
    Citation Envoyé par poneyroux Voir le message
    c'est bien le seul aspect négatif du crack : ça coûte cher.

  20. #50

  21. #51
    Un jeu de la vie (mon premier programme en C++)

  22. #52
    C'est quoi "un jeu de la vie" ?

  23. #53
    C'est une simulation, un grand classique de l'enseignement en informatique: https://fr.wikipedia.org/wiki/Jeu_de_la_vie
    Dans le genre classique, tu peux aussi essayer de résoudre les tours de Hanoï en visant le moins de lignes de codes possible: https://fr.wikipedia.org/wiki/Tours_de_Hano%C3%AF

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •