Bonjour,
Je suis en train de développer une petite application qui devrais me permettre d'animer un spectacle de théâtre d’improvisation.
Je ne suis pas programmateur mais ai quelques notions et ça m’intéresse beaucoup d'apprendre. Du coup je me repose sur un manuel et fouille les forums mais là j'ai besoin de petits coups de pouces pour avancer un peu

Voici le principe de mon appli:
- Sur un écran figurent une liste de caractéristiques à attribuer à des joueurs. (des togglebuttons)
- Pour l'instant le bouton change simplement de couleur lorsqu'on le sélectionne/désélectionne. A terme ce sera un peu plus riche mais allons y pas à pas.
- Depuis le menu on accède à un mode d'édition qui permet non pas de changer la couleur mais le titre des boutons lorsqu'on clique dessus.

En copiant du code à droite et à gauche j'ai réussi à faire quelque chose qui commence à fonctionner, mais je rencontre le problème suivant :

- J'aimerais ne pas avoir à programmer chaque bouton indépendamment mais créer une classe anonyme (est ce que j'utilise les bons termes ???). J'ai trouvé des informations sur un site et je suis particulièrement intéressé par ce paragraphe.
en fait on implémente des classes anonymes dans des attributs de façon à pouvoir les utiliser dans plusieurs éléments graphiques différents qui auront la même réaction pour le même évènement.
Du coup j'ai codé selon l'exemple :

Mainactivity
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
123
124
125
126
127
128
129
130
package giffres.imperco;
 
import android.app.Fragment;
import android.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;
 
//On déclare l'activité principale, dérivée d'AppacompatActivity et implémentant le Caraclistener du fragment
public class MainActivity extends AppCompatActivity implements MyDialogFragment.CaracListener{
    //Déclaration des varaibles
    Boolean edit_mode = false;
    View targetView;
    MenuItem menuedit;
    ToggleButton psybutton1;
    ToggleButton psybutton2;
    ToggleButton phybutton1;
    ToggleButton phybutton2;
 
 
    private View.OnClickListener clickListenerBoutons = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //test du mode d'édition
            if (edit_mode) {
                //Si mode d'édition,
                //On cherche les fragments déja crées
                FragmentManager manager = getFragmentManager();
                Fragment frag = manager.findFragmentByTag("fragment_edit_carac");
 
                //S'il y en a on les enlève
                if (frag != null) {
                    manager.beginTransaction().remove(frag).commit();
                }
 
                //On ouvre le dialog d'édition de la caractéristique
                MyDialogFragment EditCaracDialog = new MyDialogFragment();
                EditCaracDialog.show(manager, "fragment_edit_carac");
 
                //Si on n'est pas en mode d'édition
                //Si le bouton est coché
            } else if (psybutton1.isChecked()) {
                // on définit son image de fond
                psybutton1.setBackgroundResource(R.drawable.button_red);
                //Si le bouton n'est pas coché
            } else {
                // on définit son image de fond
                psybutton1.setBackgroundResource(R.drawable.button_grey);
            }
        }
    };
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Affectation du fichier de layout
        setContentView(R.layout.activity_main);
 
        //Obtention des références des composants
        targetView = findViewById(R.id.MainLayout);
        psybutton1 = (ToggleButton) findViewById(R.id.button_psy1);
        phybutton1 = (ToggleButton) findViewById(R.id.button_phy1);
        psybutton2 = (ToggleButton) findViewById(R.id.button_psy2);
        phybutton2 = (ToggleButton) findViewById(R.id.button_phy2);
 
        //Comportement lors d'un changement d'un clic sur les boutons
        psybutton1.setOnClickListener(clickListenerBoutons);
        phybutton1.setOnClickListener(clickListenerBoutons);
        psybutton2.setOnClickListener(clickListenerBoutons);
        phybutton2.setOnClickListener(clickListenerBoutons);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate our menu from the resources by using the menu inflater.
        getMenuInflater().inflate(R.menu.main, menu);
        menuedit = menu.findItem(R.id.menu_edit);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_load:
                //Chargement d'une sauvegarde
                return true;
            case R.id.menu_edit:
                //Bascule mode d'édition
                edit_mode = !edit_mode;
                //Passage en mode d'édition ou non
                EditMode();
                return true;
            case R.id.menu_background:
                // Choix de l'image de fond
                return true;
            case R.id.menu_save:
                // Sauvegarder la planche
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
 
    public void onFinishCaracDialog(String carac) {
        psybutton1.setTextOn(carac);
        psybutton1.setTextOff(carac);
    }
 
    public void EditMode(){
 
        if(edit_mode) {
            targetView.setBackgroundColor(R.color.white);
            menuedit.setTitle(R.string.menu_nedit);
            menuedit.setIcon(R.drawable.ic_done_black_24dp);
 
        }
        else {
            targetView.setBackgroundColor(R.color.black);
            menuedit.setTitle(R.string.menu_edit);
            menuedit.setIcon(R.drawable.ic_create_black_24dp);
        }
    }
 
}
et celui du fragment "Mydialogfragment"
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
package giffres.imperco;
 
import android.app.DialogFragment;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.ToggleButton;
 
/**
 * Created by david on 21/12/2015.
 */
public class MyDialogFragment extends DialogFragment implements TextView.OnEditorActionListener {
    private EditText caractxt;
 
    public interface CaracListener {
        void onFinishCaracDialog(String carac);
    }
 
    // Empty constructor required for DialogFragment
    public MyDialogFragment() {
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.carac_dialog, container);
        caractxt = (EditText) view.findViewById(R.id.caractxt);
 
        // set this instance as callback for editor action
        caractxt.setOnEditorActionListener(this);
        caractxt.requestFocus();
        getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
 
        return view;
    }
 
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        // Return input text to activity
        CaracListener activity = (CaracListener) getActivity();
        activity.onFinishCaracDialog(caractxt.getText().toString());
        this.dismiss();
        return true;
    }}
Le début de l'opération se déroule normalement mais après avoir validé ma boite de dialogue, comme agir sur le bouton concerné et non sur un bouton désigné au préalable. Le problème se pose pour l'image de fond ici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
                //Si on n'est pas en mode d'édition
                //Si le bouton est coché
            } else if (psybutton1.isChecked()) {
                // on définit son image de fond
                psybutton1.setBackgroundResource(R.drawable.button_red);
                //Si le bouton n'est pas coché
            } else {
                // on définit son image de fond
                psybutton1.setBackgroundResource(R.drawable.button_grey);
            }
et pour le titre du bouton ici
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
    public void onFinishCaracDialog(String carac) {
        psybutton1.setTextOn(carac);
        psybutton1.setTextOff(carac);
    }
Quelqu'un peut-il me mettre sur la voie car là je commence à vraiment sécher et en plus j'ai l'impression que ce na doit pas être sorcier.

J'ai aussi les quelques soucis suivants mais c'est secondaire, je recréerai des discussion exprès.
Lors de l'utilisation:
- Lorsque je modifie les titleon et titleoff de mon togglebutton, la mise à jour n'est effectué que lorsque je réédite ce bouton une seconde fois.
- Lorsque je change d'orientation, le layout est réinitialisé et je perds tout mon paramétrage.
- Lorsque je passe en mode d'édition, je demande normalement un background blanc mais j'obtiens un gris. Il doit y avoir un problème de transparence.