2016-07-29 9 views
0

У меня есть следующий метод, когда я должен подтвердить пароль пользователя, прежде чем он получит доступ к меню настройки. Для этого я заставляю его снова войти, потому что Parse (мое облачное хранилище) не позволяет мне проверять пароли. Все идет нормально. Проблема заключается в том, что я надуваю view на свой AlertDialog, чтобы использовать пользовательские button и EditText. Вы можете видеть в моем коде ниже, что я прокомментировал раздел Button, потому что, когда я пытаюсь получить onClickListener, он не работает. Он просто ничего не делает. Поэтому я использую alertDialogPositiveButton, и все в порядке. Вторая проблема и реальная проблема заключается в том, что я не могу извлечь вставку данных в editText. SUpassword3 всегда равен нулю, а не null. Кто-то может помочь?Надутый макет для alertdialog не работает

метод:

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 (файл XML я надуть на 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> 

Финальная версия (рабочий):

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

Где вы пытаетесь получить кнопку? – Shaishav

+0

Я отредактировал код, кнопка там в файле xml ... Я просто забыл скопировать эту часть ... –

ответ

0

Вы надуть другой вид внутри вашего onClickListener. Вот почему вы на самом деле проверяете текст другого edtPassword3, а не тот, который видим для пользователя. Это должно быть что-то вроде этого:

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

Спасибо! Ты прав. –

0

Попробуйте использовать: Диалог класса

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

Спасибо за ваш ответ, хотя это не сработало для меня. –

0

Получить ссылку накачанного зрения:

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

В диалоговом использовании:

alertSetup.setView(dialogView); 

Затем, кнопка доступа с помощью:

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

Благодарим за отзыв, хотя это не сработало для меня. –