2013-06-06 12 views
12

Otrzymuję NoSuchMethodException podczas korzystania z setOnDismissListener na Dialog w systemie Android na urządzeniu z 4.1.2.Dlaczego występuje wyjątek Android NoSuchMethodException w zestawie AlertDialog.Builder setOnDismissListener

Ten sam kod działa na emulatorze z wersją 4.2.2.

new AlertDialog.Builder(this) 
    .setTitle(R.string.select_province) 
    .setOnDismissListener(new OnDismissListener() { 
     public void onDismiss(DialogInterface arg0) { 
     //== other stuff 
    } 
}).show(); 

Wszelkie pomysły?

Odpowiedz

27

Rozwiązaniem dla tego problemu jest po prostu najpierw utworzyć okno jak poniżej:

AlertDialog dialog = new AlertDialog.Builder(this).setTitle(R.string.select_province).create(); 

a następnie ustawić słuchacza bezpośrednio do okna:

dialog.setOnDismissListener(new OnDismissListener() { 
    public void onDismiss(DialogInterface arg0) { 
    //== other stuff 
}); 

wtedy, gdy także chcesz to pokazać:

dialog.show(); 

Wynik jest taki sam i wszystkie te metody są obsługiwane od czasu interfejsu API 1.

AlertDialog. setOnDismissListener (DialogInterface.OnDismissListener listener)

AlerDialog.Builder. create()

1

Dla każdego, kto szuka tej odpowiedzi podczas korzystania z DialogFragment, metoda Mario spowoduje wyjątek IllegalStateException. W tym przypadku Zamiast używać metody setOnDismissListener zgodnie z sugestią, należy zastąpić istniejącą metodę Fragment w onDismiss.

Powiązane problemy