runit Posté(e) 29 août 2010 Share Posté(e) 29 août 2010 Salut, Enfaite je voudrais savoir comment mettre un bouton ok sur la boite de dialogue qui quand on click dessus nous renvois a l'action précédentes. Merci d'avance. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Puni Posté(e) 29 août 2010 Share Posté(e) 29 août 2010 Quel type de boite de dialogue as-tu ? Une "toute faite" ou une avec un contentView perso ? Si c'est la 1ère solution, regarde par là : http://developer.android.com/intl/fr/guide/topics/ui/dialogs.html (Menu "Adding buttons") Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
runit Posté(e) 29 août 2010 Auteur Share Posté(e) 29 août 2010 (modifié) Merci j'en avais une toute faite mais je pense que je vais faire un contentView perso mais esc qu'il y a une foncion qui enleve la boite de dialogue au bout de X seconde j'ai essayé avec wait mais ca ne fonctionne pas . Modifié 29 août 2010 par runit Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 17 septembre 2010 Share Posté(e) 17 septembre 2010 (modifié) Je profite de ce topic pour poser ma question, j'essaye de faire une boite de dialogue perso, pour ça j'avais trouvé un tuto sur android-france: http://android-france.fr/2009/08/04/developpez-une-application-pour-android-etape-21-modifier-un-ingredient-avec-une-boite-de-dialogue/ Mais il ne semble pas complet, je n'arrive pas à mapper les boutons valider etc. Bref j'ai du mal à saisir complètement comment faire une boite de dialogue personnalisée. Mon objectif, c'est de faire une boite de dialogue afin d'ajouter un élément. Donc el tuto semble correspondre mais il manque plein de chose :/ Et il est dédié à un exemple particulier, moi il me faudrait juste quelque chose de simple. (et je n'ai pas réussi à récupérer les sources complètes pour voir ce qu'il y a juste dans la boite de dialogue :( ) Si vous avez un autre exemple je suis preneur. EDIT: ah si ça remarche pour télécharger les sources, tout fois si vous avez un meilleur exemple je reste preneur. Modifié 17 septembre 2010 par Burn2 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ichpa Posté(e) 17 septembre 2010 Share Posté(e) 17 septembre 2010 (modifié) Salut Burn2, J'ai regardé ton lien et je trouve leur technique compliquée. Quand j'ai besoin d'une boîte de dialogue personnalisée, je me casse pas la tête : j'utilise le fameux AlertDialog.Builder dans lequel j'ajoute ma vue personnalisée à l'aide de la méthode setView. Ensuite libre à toi de rajouter les boutons de validation comme d'habitude avec les méthodes set*Button. Dans mon cas, ta vue ne doit pas contenir les boutons de validation. Pour récupérer la vue à partir de ton XML, il existe plusieurs possibilités dont l'utilisation de LayoutInflater. EDIT : je viens de trouver un exemple dans l'APIDemos (qui devrait être regardé par reflex !) qui confirme ma méthode : voir le dernier exemple DIALOG_TEXT_ENTRY. Bon courage, ichpa Modifié 17 septembre 2010 par ichpa Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 17 septembre 2010 Share Posté(e) 17 septembre 2010 AH merci beaucoup de ton aide. :) Je vais regarder tout ça. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 17 septembre 2010 Share Posté(e) 17 septembre 2010 (modifié) L'exemple donné n'est pas vraiment clair, j'ai l'impression qu'il y a un bout de deux classes et incomplètes. :/ Et en plus ils se références à des boutons sur un design qu'ils ne fournissent pas du coup je n'ai aucune idée sur quoi le rattacher. Exemple: /* Display a text entry dialog */ Button textEntry = (Button) findViewById(R.id.text_entry_button); textEntry.setOnClickListener(new OnClickListener() { public void onClick(View v) { showDialog(DIALOG_TEXT_ENTRY); } }); Mais pourquoi dans le on create ils lancent tous les messages différents tout ça??? J'en ai choisi qu'un ok, ça ce n'est pas trop difficile, mais ce fameux button text Entry il sort d'oû???? Je ne comprends vraiment pas la relation et j'ai du mal à voir ce que je peux dégager. Le showDialog ne marche pas il me dit que ça n'existe pas etc. Il manque le constructeur etc, bref c'est quoi cet exemple??? :( Et l'exemple d'android france ne marche pas non plus. Pff c'est vraiment mal foutu ces trucs je trouve. :( EDIT2: franchement je ne comprends pas comment faire, tout est fait comme si on connaissait tout par coeur. :( Moi je veux juste faire une boite de dialogue avec mon champ texte et mes boutons ok cancel à partir de mon design. Il n'y a pas un exemple clair de ça??? Modifié 17 septembre 2010 par Burn2 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 17 septembre 2010 Share Posté(e) 17 septembre 2010 (modifié) Bon pour l'instant j'en suis là: Context mContext = getApplicationContext(); LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.profile1, (ViewGroup) m_listView); AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setIcon(R.drawable.sleepytux_logo); dialog.setTitle(R.string.app_name); dialog.setView(layout); dialog.setPositiveButton(R.string.buttonOkText, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* User clicked OK so do some stuff */ } }); dialog.setNegativeButton(R.string.buttonCancelText , new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* User clicked cancel so do some stuff */ } }); Je ne pense pas être trop loin d'une solution mais le seul problème que j'ai c'est sur cette ligne là: View layout = inflater.inflate(R.layout.profile1, (ViewGroup) m_listView); Au niveau du viewGroup, je ne sais pas du tout quoi mettre pour le viewGroup. :/ J'arrive à ne plus avoir d'erreur, mais je me retrouve bloqué, impossible d'afficher cette boite de dialogue. :( Sachant que ma classe principale ou j'essaye d'afficher cette boite de dialogue c'est une list activity avec: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); m_listView=this.getListView(); m_listView.setItemsCanFocus(false); m_listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); je lui ai mis un menu et donc quand je fais: Context mContext = getApplicationContext(); LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE); LinearLayout mlayout=new LinearLayout(mContext); View layout = inflater.inflate(R.layout.profile1, (ViewGroup) mlayout); AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setIcon(R.drawable.sleepytux_logo); dialog.setTitle(R.string.app_name); dialog.setView(layout); dialog.setPositiveButton(R.string.buttonOkText, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* User clicked OK so do some stuff */ } }); dialog.setNegativeButton(R.string.buttonCancelText , new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* User clicked cancel so do some stuff */ } }); AlertDialog alertDialog = dialog.create(); alertDialog.show(); Mais je ne vois pas quoi mettre là: View layout = inflater.inflate(R.layout.profile1, (ViewGroup) mlayout); et pour l'instant je n'arrive qu'à avoir une erreur. :( 09-18 00:16:17.795: ERROR/AndroidRuntime(555): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application Modifié 17 septembre 2010 par Burn2 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 17 septembre 2010 Share Posté(e) 17 septembre 2010 (modifié) Bon j'ai réussi à le faire avec: Context mContext = getApplicationContext(); LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE); LinearLayout mlayout=new LinearLayout(mContext); View layout = inflater.inflate(R.layout.profile1, null); AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setIcon(R.drawable.sleepytux_logo); dialog.setTitle(R.string.app_name); dialog.setView(layout); dialog.setPositiveButton(R.string.buttonOkText, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* User clicked OK so do some stuff */ } }); dialog.setNegativeButton(R.string.buttonCancelText , new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* User clicked cancel so do some stuff */ } }); AlertDialog alertDialog = dialog.create(); alertDialog.show(); Ce fut laborieux mais ça marche, j'ai juste à faire une présentation un poil mieux et c'est bon. :) EDIT: hum tout n'est pas gagné, je n'arrive pas à récupérer le contenu de la texedit situé dans la boite de dialogue. je fais tout simplement: TextView profileNameText = (TextView) findViewById(R.id.editTextProfileName); displayAlertDialog("test",profileNameText.getText().toString() ); Mais je me prends un null pointeur exception. :rolleyes: Modifié 17 septembre 2010 par Burn2 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Puni Posté(e) 18 septembre 2010 Share Posté(e) 18 septembre 2010 Essaie ca (j'ai rajouté "dialog." avant le findviewbyid) TextView profileNameText = (TextView) dialog.findViewById(R.id.editTextProfileName); displayAlertDialog("test",profileNameText.getText().toString() ); Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 18 septembre 2010 Share Posté(e) 18 septembre 2010 (modifié) Bonjour, merci de votre réponse, mais il n'y a pas de "findViewById" dans la classe AlertDialog.Builder donc ça ne peut marcher. EDIT: voici le détail des erreurs après avoir tenté de modifier en: TextView profileNameText = (TextView) findViewById(R.id.editTextProfileName); String text= profileNameText.getText()+""; displayAlertDialog("test",text ); juste au cas ou... (je précise que ma méthode displayAlertDialog marche bien et que si je remplace juste l'appel de cette méthode par: displayAlertDialog("test","text "); ça marche, donc c'est bien la récupération du texte qui foire. 09-18 11:02:33.518: ERROR/AndroidRuntime(250): Uncaught handler: thread main exiting due to uncaught exception 09-18 11:02:33.538: ERROR/AndroidRuntime(250): java.lang.NullPointerException 09-18 11:02:33.538: ERROR/AndroidRuntime(250): at com.Burn2.Sleepytux2.Home$2.onClick(Home.java:120) 09-18 11:02:33.538: ERROR/AndroidRuntime(250): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158) 09-18 11:02:33.538: ERROR/AndroidRuntime(250): at android.os.Handler.dispatchMessage(Handler.java:99) 09-18 11:02:33.538: ERROR/AndroidRuntime(250): at android.os.Looper.loop(Looper.java:123) 09-18 11:02:33.538: ERROR/AndroidRuntime(250): at android.app.ActivityThread.main(ActivityThread.java:4363) 09-18 11:02:33.538: ERROR/AndroidRuntime(250): at java.lang.reflect.Method.invokeNative(Native Method) 09-18 11:02:33.538: ERROR/AndroidRuntime(250): at java.lang.reflect.Method.invoke(Method.java:521) 09-18 11:02:33.538: ERROR/AndroidRuntime(250): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 09-18 11:02:33.538: ERROR/AndroidRuntime(250): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 09-18 11:02:33.538: ERROR/AndroidRuntime(250): at dalvik.system.NativeStart.main(Native Method) la ligne 120 étant justement String text= profileNameText.getText()+""; EDIT2: pour comprendre j'essaye de récupérer le champ de texte qu'on voit là: Lorsqu'on clique sur le bouton ok afin de pouvoir faire quelque chose avec. EDIT: bon j'essaye cet exemple là: http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application Modifié 18 septembre 2010 par Burn2 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Burn2 Posté(e) 18 septembre 2010 Share Posté(e) 18 septembre 2010 (modifié) Nouvelle tentative à partir de cet exemple, et même résultat, je ne vois vraiment pas comment récupérer le contenu de cet edit text. :'( Voilà ou j'en suis: //set up dialog Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.profile1); dialog.setTitle("This is my custom dialog box"); dialog.setCancelable(true); //there are a lot of settings, for dialog, check them all out! //set up text //TextView text = (TextView) dialog.findViewById(R.id.textEditProfileName); //text.setText("text"); //set up image view //ImageView img = (ImageView) dialog.findViewById(R.id.ImageView01); //img.setImageResource(R.drawable.nista_logo); //set up button Button buttonCancel = (Button) dialog.findViewById(R.id.buttonCancel); buttonCancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { EditText profileNameText = (EditText) v.findViewById(R.id.textEditProfileName); displayAlertDialog("test",profileNameText.getText().toString()); } }); //set up button Button buttonOk = (Button) dialog.findViewById(R.id.buttonOk); buttonOk.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } }); //now that the dialog is set up, it's time to show it dialog.show(); Mon dialogue s'affiche bien, niveau présentation c'est pas mal, etc, mais dès que je veux récupérer le contenu de cet élément: 09-18 13:30:30.768: ERROR/AndroidRuntime(620): Uncaught handler: thread main exiting due to uncaught exception 09-18 13:30:30.788: ERROR/AndroidRuntime(620): java.lang.NullPointerException 09-18 13:30:30.788: ERROR/AndroidRuntime(620): at com.Burn2.Sleepytux2.Home$2.onClick(Home.java:160) et ligne 160 c'est biensûr: displayAlertDialog("test",profileNameText.getText().toString()); Le profileNameText.getText().toString() renvoyant toujours un null pointeur exception. :( Là à part attendre de l'aide je ne vois vraiment pas quoi faire, j'ai beau google de partout je ne trouve rien. EDIt: j'ai réussi avec une classe particulière faite à la main, punaise mais c'est vraiment du grands n'importe quoi franchement, je vous raconte pas le bidouillage qu'il faut faire en prenant exemple un peu partout! Voici la solution: package com.Burn2.Sleepytux2; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class ProfilePanel1 extends Dialog implements OnClickListener{ private Button buttonCancel; private Button buttonOk; private EditText profileNameText; private Context m_context; public interface ReadyListener { public void ready(int id); } public ProfilePanel1(Context context) { super(context); // TODO Auto-generated constructor stub m_context=context; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.profile1); setTitle("This is my custom dialog box"); setCancelable(true); //set up button buttonCancel= (Button)findViewById(R.id.buttonCancel); buttonCancel.setOnClickListener(this); buttonOk=(Button)findViewById(R.id.buttonOk); buttonOk.setOnClickListener(this); } public void onClick(View view) { switch (view.getId()) { case R.id.buttonCancel: dismiss(); break; case R.id.buttonOk: } } } Modifié 18 septembre 2010 par Burn2 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.