Aller au contenu

Probleme boite de dialogue !!


runit

Recommended Posts

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é par runit
Lien vers le commentaire
Partager sur d’autres sites

  • 3 weeks later...

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é par Burn2
Lien vers le commentaire
Partager sur d’autres sites

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é par ichpa
Lien vers le commentaire
Partager sur d’autres sites

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é par Burn2
Lien vers le commentaire
Partager sur d’autres sites

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é par Burn2
Lien vers le commentaire
Partager sur d’autres sites

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é par Burn2
Lien vers le commentaire
Partager sur d’autres sites

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à:

dialogr.th.png

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é par Burn2
Lien vers le commentaire
Partager sur d’autres sites

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é par Burn2
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...