2016-10-31 3 views
1

Ich entwickle eine App in Xamarin Forms, aber ich habe ein seltsames Verhalten bemerkt, wenn ich eine Warnung in Android (Version größer als 4.2.2) anzeigen, wenn ich außerhalb der Warnung drücke modal verschwindet die Warnung sofort. Gibt es einen Weg dies zu verhindern? Ich möchte, dass der Alarm nur bei der Benutzerauswahl verschwindet.Xamarin Forms Display Warnung verschwinden

Vielen Dank

Antwort

0

Wenn ein Dialog in Android gezeigt, etwas außerhalb von Anklicken abzubrechen ist ziemlich Standard. Um dieses Verhalten zu ändern, müssen Sie eine Schnittstelle in Ihrem PCL erstellen:

public interface ICustomAlert 
{ 
    void ShowAlert(string message); 
} 

In Ihrem Android-Projekt zu erstellen, die Umsetzung (etwa wie folgt):

[assembly: Xamarin.Forms.Dependency (typeof (AndroidCustomAlert))] 
    public class AndroidCustomAlert : ICustomAlert 
    { 
     void ShowAlert(string message) 
     { 
     var builder = new AlertDialog.Builder(Xamarin.Forms.Forms.Context); 
     builder.SetMessage(message); 
     builder.SetPositiveButton("OK", (sender, args) => { }); 
     builder.SetCancelable(false); 
     builder.Show(); 
     } 
    } 

Beachten Sie die SetCancelable(false). Dadurch kann der Benutzer nicht außerhalb des Alerts klicken und ihn verschwinden lassen.

es zu verwenden, erhalten ICustomAlert aus dem Abhängigkeitsdienst und rufen ShowAlert:

DependencyService.Get<ICustomAlert>().ShowAlert("Hello!"); 
+0

Hallo Adam, vielen Dank für Ihre Antwort. Ich habe Ihre Lösung versucht, aber meine App stürzt ab: "Android.Views.WindowManagerBadTokenException: Kann Fenster nicht hinzufügen - Token Null ist nicht für eine Anwendung". Können Sie mir helfen, dieses Problem zu lösen? –

+0

Ich war nicht in meiner IDE, wenn ich das eintippte. Das Problem war in AlertDialog.Builder von AndroidCustomAlert enthalten. Es braucht den Kontext. Holen Sie es von Xamarin.Forms.Forms.Context anstelle von Application.Context. Wichtig ist, dass Sie den DependencyService und den SetCancelable (false) verstehen. – Adam

+0

@AndreaMarinoni Ich glaube, das beantwortet deine Frage. Hat die aktualisierte Antwort für Sie funktioniert? – Adam