2013-03-06 9 views
5

Jestem stosunkowo nowy w systemie Android/Java. Dzięki Stack Overflow mogłem się wiele nauczyć od pytań zadawanych tutaj. Jednak teraz utknąłem na tym problemie.Wyświetlanie wielu AlertDialogs

Mam hasło wejściowe AlertDialog, które pojawia się po uruchomieniu aplikacji. Odczytuje hasło z EditText i porównuje je z tym zapisanym w pliku. Potrzebowałem dodatkowego AlertDialog, który pojawia się, gdy podane jest nieprawidłowe/błędne hasło. To też zaimplementowałem.

Teraz ten drugi dialog ma dwa przyciski - Resetuj i Ponów. Chcę, aby w działaniu ponownie wyświetlane było pierwsze okno dialogowe, gdy klikniemy Ponów próbę. Tutaj nie mam pojęcia. Jeśli ktokolwiek może dostarczyć działające rozwiązanie i małe wyjaśnienie, będę bardzo zobowiązany.

Oto mój kod:

LayoutInflater li = LayoutInflater.from(context); 
View passView = li.inflate(R.layout.authdialog, null); 

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 

// set prompts.xml to alertdialog builder 
alertDialogBuilder.setView(passView); 

final EditText passInput = (EditText) passView.findViewById(
     R.id.editTextDialogUserInput); 
final TextView txtv = (TextView) findViewById(R.id.textv); 

// set dialog message 
alertDialogBuilder 
     .setCancelable(false) 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int id) { 
       String data = ""; 
       try { 
        FileInputStream fis = openFileInput("authfile"); 

        InputStreamReader in = new InputStreamReader(fis); 
        BufferedReader br = new BufferedReader(in); 
        data = br.readLine(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

       if (data.toString().equals(
         passInput.getText().toString())) { 
        txtv.setText("You Have Logged in"); 
       } else { 
        LayoutInflater ln = LayoutInflater.from(context); 
        View invalidView = ln.inflate(R.layout.invdialog, 
          null); 
        AlertDialog.Builder invalidDialogBuild = new AlertDialog.Builder(
          context); 
        invalidDialogBuild.setView(invalidView); 

        // set dialog message 
        invalidDialogBuild 
          .setCancelable(false) 
          .setPositiveButton(
            "Retry", 
            new DialogInterface.OnClickListener() { 

             public void onClick(
               DialogInterface dialog, 
               int id) { 
              dialog.cancel(); 
             } 
            }) 
          .setNegativeButton(
            "Reset", 
            new DialogInterface.OnClickListener() { 

             public void onClick(
               DialogInterface dialog, 
               int id) { 
              dialog.cancel(); 
             } 
            }); 

        dialog.cancel(); 

        AlertDialog invalidDialog = invalidDialogBuild 
          .create(); 

        // show it 
        invalidDialog.show(); 
       } 
      } 
     }) 
     .setNegativeButton("Cancel", 
       new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int id) { 
         dialog.cancel(); 
        } 
       }); 

// create alert dialog 
AlertDialog alertDialog = alertDialogBuilder.create(); 

// show it 
alertDialog.show(); 
+1

Wiem, że niektóre okna dialogowe działają już częściowo. Ale w rzeczywistości uważam, że lepiej nie używać okien dialogowych do tego celu. Zamiast tego mogę mieć mój ekran logowania 'Activity' z' EditView' dla nazwy użytkownika i hasła, przycisku Submit itp. Mam również komunikat 'TextView', który aktualizuję na czerwono i komunikat (używając' theTextView.setText ("") 'jeśli dana osoba nie zaloguje się, w ten sposób nie wyskakuje nic po prostu zmieniając tekst wiadomości, aby ostrzec użytkownika, że ​​jego nazwa użytkownika jest nieprawidłowa – wired00

+0

W rzeczywistości jest to aplikacja tylko dla jednej osoby, w której nie potrzebują nazwy użytkownika, ale tylko hasło I muszę to zrobić na ekranie powitalnym, zamiast po wyświetleniu ekranu przez 2 sekundy lub mniej, hasło musi zostać zadane.Możesz podejść do tego poprzez okno dialogowe, zmieniając po prostu widok tekstu, który jest na górze zamiast wyskakiwania nowa wiadomość, ale wtedy nie będzie opcji resetowania Czy mogę mieć trzy przyciski w oknie dialogowym z ostrzeżeniem – GunJack

Odpowiedz

1

utworzyć dwa osobne metody swoich dialogach i nazywają je jak mam zrobić w poniższy kod wymeldowania.

private void dialogShow() 
{ 
    LayoutInflater li = LayoutInflater.from(context); 
    View passView = li.inflate(R.layout.authdialog, null); 
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 
    // set prompts.xml to alertdialog builder 
    alertDialogBuilder.setView(passView); 
    final EditText passInput = (EditText) passView.findViewById(R.id.editTextDialogUserInput); 
    final TextView txtv = (TextView) findViewById(R.id.textv); 
    // set dialog message 
    alertDialogBuilder.setCancelable(false) 
      .setPositiveButton("OK", new DialogInterface.OnClickListener() 
      { 
      public void onClick(DialogInterface dialog, int id) 
      { 
       String data = ""; 
       try 
       { 
      FileInputStream fis = openFileInput("authfile");       InputStreamReader in = new InputStreamReader(fis); 
       BufferedReader br = new BufferedReader(in); 
       data = br.readLine(); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
      if (data.toString().equals(passInput.getText().toString())) 
        { 
         txtv.setText("You Have Logged in"); 
        } 
        else 
        { 
        RetryDialog();//Call the dialog of retry 
        } 
       } 
      }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int id) 
       { 
        dialog.cancel(); 
       } 
      }); 
    // create alert dialog 
    AlertDialog alertDialog = alertDialogBuilder.create(); 
    // show it 
    alertDialog.show(); 
} 
//Shows the Retry Dialog 
private void RetryDialog() 
{ 
    LayoutInflater ln = LayoutInflater.from(context); 
    View invalidView = ln.inflate(R.layout.activity_main, null); 
    AlertDialog.Builder invalidDialogBuild = new AlertDialog.Builder(context); 
    // invalidDialogBuild.setView(invalidView); 
    // set dialog message 
    invalidDialogBuild.setCancelable(false) 
      .setPositiveButton("Retry", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int id) 
       { 
        dialogShow(); 
        dialog.cancel(); 
       } 
      }).setNegativeButton("Reset", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int id) 
       { 
        dialog.cancel(); 

       } 
      }); 

    AlertDialog invalidDialog = invalidDialogBuild.create(); 
    // show it 
    invalidDialog.show(); 

} 

edycja:

Dialog z ThreeButtons.

/** 
* This is method to display dialog with three 
* button("Yes, No and Cancel button") 
*/ 
public void showThreeButtonDialog() 
{ 
    private AlertDialog m_alertDialog; 
    private AlertDialog.Builder m_builder = new AlertDialog.Builder(this); 
    m_builder.setTitle("Title Text"); 
    m_builder.setMessage("Dialog Message"); 
    m_builder.setPositiveButton("yes", new DialogInterface.OnClickListener(){ 
     @Override 
     public void onClick(DialogInterface p_dialog, int p_which) 
     { 
      Toast.makeText(AlertDialogActivity.this, "Press Yes", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    m_builder.setNeutralButton("No"), new DialogInterface.OnClickListener(){ 
     @Override 
     public void onClick(DialogInterface p_dialog, int p_which) 
     { 
      Toast.makeText(AlertDialogActivity.this, "Press No", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    m_builder.setNegativeButton("Cancel"), new DialogInterface.OnClickListener(){ 
     @Override 
     public void onClick(DialogInterface p_dialog, int p_which) 
     { 
      Toast.makeText(AlertDialogActivity.this, "Press Cancel", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    m_alertDialog = m_builder.create(); 
    m_alertDialog.show(); 
} 
+0

Masz to Dziękujemy – GunJack

+0

Witaj Kochanie ...... :) – GrIsHu

+0

Jeszcze jedno zapytanie, to to pos sible mieć 3 przyciski w AlertDialog. – GunJack

1

Grishu mnie uprzedził, kopalnia jest przynajmniej krótsze ...

private void showLoginDialog(final Context context) { 
    LayoutInflater li = LayoutInflater.from(context); 
    View passView = li.inflate(R.layout.authdialog, null); 
    final EditText passInput = (EditText) passView.findViewById(R.id.editTextDialogUserInput); 
    final TextView txtv = (TextView) findViewById(R.id.textv); 

    new AlertDialog.Builder(context) 
     .setView(passView) 
     .setCancelable(false) 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       String data = ""; 
       try { 
        FileInputStream fis = openFileInput("authfile"); 
         InputStreamReader in = new InputStreamReader(fis); 
        BufferedReader br = new BufferedReader(in); 
        data = br.readLine(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

       if (data.toString().equals(passInput.getText().toString())) { 
        txtv.setText("You Have Logged in"); 
       } else { 
        dialog.dismiss(); 
        showInvalidDialog(context); 
       } 
      } 
     }) 
     .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.dismiss(); 
      } 
     }) 
     .show(); 
} 

private void showInvalidDialog(final Context context) { 
    LayoutInflater ln = LayoutInflater.from(context); 
    View invalidView = ln.inflate(R.layout.invdialog, null); 

    new AlertDialog.Builder(context) 
     .setView(invalidView) 
     .setCancelable(false) 
     .setPositiveButton("Retry", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.dismiss(); 
       showLoginDialog(context); 
      } 
     }) 
     .setNegativeButton("Reset", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.dismiss(); 
      } 
     }) 
     .show(); 
} 

Objaśnienie: przenieść kod na dwóch oddzielnych oknach do metod, które mogą dzwonić do siebie. Należy konsekwentnie używać wzorca budowniczego, aby kod był krótki i elegancki. Użyj dialog.dismiss() zamiast dialog.cancel(), chyba że chcesz wywołać potencjalny OnCancelListener.

+0

Dzięki, mam teraz szansę. – GunJack