2016-07-29 6 views
0

J'ai la méthode suivante où je dois confirmer le mot de passe de l'utilisateur avant qu'il ne soit autorisé à accéder au menu de configuration. Pour ce faire, je l'oblige à se reconnecter parce que Parse (mon stockage en nuage) ne me permet pas de confirmer les mots de passe. Jusqu'ici tout va bien. Le problème est quand je gonfle le view à mon AlertDialog pour utiliser un button et EditText. Vous pouvez voir dans mon code ci-dessous que j'ai commenté la section Button, parce que quand j'essaye d'obtenir le onClickListener cela ne fonctionne pas. Cela ne fait rien. Donc, je suis actuellement en utilisant le alertDialogPositiveButton et ça va. Le deuxième problème et le vrai est que je ne peux pas récupérer l'insertion de données dans le editText. Le SUpassword3 est toujours égal à vide, pas null. Puis-je avoir une aide s'il vous plait?Disposition gonflée pour alertdialog ne fonctionne pas

méthode

:

public void confirmPassword(){ 

     final LayoutInflater inflateSetup = getLayoutInflater(); 

     AlertDialog.Builder alertSetup = new AlertDialog.Builder(this); 
     alertSetup.setView(inflateSetup.inflate(R.layout.inflate_setup, null)); 
     alertSetup.setPositiveButton("Confirm", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       System.out.println("User has clicked the [confirm] button"); 
       View viewInflate_setup = inflateSetup.inflate(R.layout.inflate_setup, null); 
       edtPassword3 = (EditText)viewInflate_setup.findViewById(R.id.edtPassword3); 
       SUpassword3 = edtPassword3.getText().toString(); 

       final ParseUser beforeConfirmPassword = ParseUser.getCurrentUser(); 
       ParseUser.logInInBackground(beforeConfirmPassword.getUsername(), SUpassword3, new LogInCallback() { 
        @Override 
        public void done(ParseUser parseUser, ParseException e) { 
         if(e==null){ 
          //password confirmed, logout last user and go to next setup 
          System.out.println("Password [" +SUpassword3+ "] and user [" +beforeConfirmPassword.getUsername()+ "] confirmed, logout last user and go to setup"); 
          beforeConfirmPassword.logOut(); 
         }else{ 
          //passwords don't match 
          System.out.println("Password don't match: [" +SUpassword3 + "] USER [" +beforeConfirmPassword.getUsername()+ "]"); 
         } 
        } 
       }); 
      } 
     }); 
     final AlertDialog dialogSetup = alertSetup.create(); 
     dialogSetup.show(); 


/** 
     btnConfirmPassowod = (Button)viewInflate_setup.findViewById(R.id.btnConfirm); 
     btnConfirmPassowod.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(final View v) { 
       System.out.println("User has clicked the [confirm] button"); 
       final ParseUser beforeConfirmPassword = ParseUser.getCurrentUser(); 
       ParseUser.logInInBackground(beforeConfirmPassword.getUsername(), SUpassword3, new LogInCallback() { 
        @Override 
        public void done(ParseUser parseUser, ParseException e) { 
         if(e==null){ 
          //password confirmed, logout last user and go to next setup 
          System.out.println("Password confirmed, logout last user and go to setup"); 
          beforeConfirmPassword.logOut(); 
         }else{ 
          //passwords don't match 
          dialogSetup.dismiss(); 
          Snackbar.make(v, "Wrong password, try again.", Snackbar.LENGTH_LONG) 
            .setAction("Action", null).show(); 
         } 
        } 
       }); 
      } 
     }); */ 
    } 

inflate_setup.xml (le fichier xml I se déployer sur le AlertDialog)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:inputType="textPassword" 
     android:ems="10" 
     android:id="@+id/edtPassword3" 
     android:layout_gravity="center_horizontal" 
     android:hint="@string/EN_txt.confirmPassword" 
     /> 
<Button 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="New Button" 
    android:id="@+id/btnConfirm" 
    android:layout_gravity="center_horizontal" /> 

</LinearLayout> 

Version finale (travail):

public void confirmPassword(){ 

     final LayoutInflater inflateSetup = getLayoutInflater(); 
     final View viewInflate_setup = inflateSetup.inflate(R.layout.inflate_setup, null); 

     AlertDialog.Builder alertSetup = new AlertDialog.Builder(this); 
     alertSetup.setView(viewInflate_setup); 
     alertSetup.setPositiveButton("Confirm", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       System.out.println("User has clicked the [confirm] button"); 

       edtPassword3 = (EditText)viewInflate_setup.findViewById(R.id.edtPassword3); 
       SUpassword3 = edtPassword3.getText().toString(); 

...

+0

D'où essayez-vous d'obtenir le bouton? – Shaishav

+0

J'ai édité le code, le bouton est là sur le fichier xml ... J'ai juste oublié de copier cette partie ... –

Répondre

0

Vous gonflez une autre vue dans votre onClickListener. C'est pourquoi vous vérifiez réellement le texte d'un autre edtPassword3, pas celui qui est visible pour l'utilisateur. Il devrait être quelque chose comme ça:

View view = inflateSetup.inflate(R.layout.inflate_setup; 
final EditText edtPassword3 = (EditText)viewInflate_setup.findViewById(R.id.edtPassword3); 
alertSetup.setView(view, null)); 
    alertSetup.setPositiveButton("Confirm", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       System.out.println("User has clicked the [confirm] button"); 
       SUpassword3 = edtPassword3.getText().toString(); 
.... 
+0

Merci! Tu as raison. –

0

Essayez d'utiliser: classe Dialog

// custom dialog 
    final Dialog dialog = new Dialog(context); 
    dialog.setContentView(R.layout.custom); 
    dialog.setTitle("Title..."); 
+0

Merci pour votre réponse, même si cela n'a pas fonctionné pour moi. –

0

obtenir une référence de la vue gonflée:

View dialogView = inflateSetup.inflate(R.layout.inflate_setup, null); 

Dans l'utilisation de dialogue:

alertSetup.setView(dialogView); 

Ensuite, le bouton d'accès en utilisant:

Button myButton = (Button) dialogView.findViewById(R.id.btnConfirm); 
+0

Merci pour votre réponse, même si cela n'a pas fonctionné pour moi. –