2017-04-02 1 views
0

ich ein AlertDialog in Android Studio haben, wie unten gezeigt:Alertdialog nicht in Android Studio Anzeigen

final EditText columninput = new EditText(this); 
columninput.setInputType(InputType.TYPE_CLASS_NUMBER); 

AlertDialog.Builder adb = new AlertDialog.Builder(this); 
adb.setTitle("Choose column number"); 
adb.setView(columninput); 
adb.setMessage("Please specify the number of columns you would like to decrypt your message with."); 
adb.setCancelable(true); 
adb.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     boolean bool = true; 

     try { 
      col = Integer.parseInt(columninput.getText().toString()); 
     } 
     catch (Exception e) { 
      bool = false; 
      Toast t = Toast.makeText(getApplicationContext(), "Incorrect input", Toast.LENGTH_LONG); 
      t.show(); 
     } 

     if (bool) { 
      dialog.dismiss(); 
     } 
    } 
}); 

adb.show(); 

method1(toRead, col); 

Beachten Sie, dass toRead eine weitere Variable mit außerhalb dieses Kontexts behandelt ist; Es sollte keine Fehler verursachen. Wenn ich meine Anwendung ausführe, wird AlertDialog nie angezeigt und method1 wird sofort ausgeführt. Wenn ich jedoch die letzte Zeile (method1(toRead, col)) auskommentiere, wird der Alertdialog angezeigt, wenn die Anwendung ausgeführt wird. Warum ist das und wie kann ich sicherstellen, dass der alertDialog immer angezeigt wird?

+0

gut .... dann poste method1 bitte ... – Opiatefuchs

+0

, um herauszufinden, buchen Sie den Code von 'method1()' Beachten Sie auch, dass wenn Sie einen Dialog anzeigen und ein Ergebnis aus dem Dialog erhalten möchten, um ihn in einer anderen Methode zu verwenden, können Sie dies nicht tun, indem Sie die Dialog-Schaltfläche zum Aufruf verwenden Entweder ein Rückruf im Elternteil oder Aufruf von method1() selbst. – Yazan

+0

Ich würde method1() posten, aber es ist sehr lang (über 300 Zeilen Code!). Ich habe es jedoch selbst getestet, und ich bin ziemlich sicher, dass es nicht die Quelle irgendeines Fehlers sein sollte ... – Eragon20

Antwort

1

Dieses Problem tritt auf, weil beim Öffnen von AlertDialog die Aktivität in den Pausestatus wechselt. Wenn Sie also die letzte Zeile ausblenden und die Methode nicht aufrufen, kann die Aktivität in Pause Status gehen und die AlertDialog wird erfolgreich angezeigt.

Während im anderen Fall, wenn die letzte Methode aufgerufen wird, was passiert ist:
vor Ihrem Alertdialog wird erstellt, die method1() wird aufgerufen.

Ich hoffe, das hilft.

0

Mai dieses hilft Ihnen:

Beispiel:

new AlertDialog.Builder(this) 
      .setIcon(android.R.drawable.ic_dialog_alert) 
      .setTitle("Delete") 
      .setMessage("Are you sure you want to delete Product?") 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dbni.delete(ItemID); 
        arrayStudent = dbni.selectAll(); 
        list_view.setAdapter(new Adapter_viewitem(mactivity, arrayStudent)); 
        Toast.makeText(getApplicationContext(), "Product deleted successfully", Toast.LENGTH_SHORT).show(); 
       } 

      }).setNegativeButton("No", null).show();