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.
Du coup j'ai codé selon l'exemple :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.
Mainactivity
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
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); } } }
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
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; }}
et pour le titre du bouton 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); }
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.
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); }
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.
Partager