How to display dialog fragment in Android with LoadApplication from Xamarin.Forms

anze kozole 0 Reputation points
2023-08-16T12:30:47.8233333+00:00

I am still fairly new to .NET MAUI and I need to rewrite a Xamarin.Forms android app to .NET MAUI. I am also using Prism framework since it has been used in Xamarin.Forms.

I have a Dialog fragment and I want to display it and initialize it when the main activity is created. In Xamarin.Forms you did this using LoadApplication(new App(new AndroidInitializer(this))); in MainActivity.cs, but I don't know what to use in .NET MAUI. I looked through the lifecycle of .NET MAUI and also this post https://learn.microsoft.com/en-us/answers/questions/1048957/platform-specific-initialization-versus-net-maui-a, but I can't find out what I should use and also don't understand it properly. AndroidInitializer is used to invoke the AndroidNotificationService where the dialog fragment resides.

As I went throuh the documentation I saw that I don't use the MainActivity.cs for inicialization and I should use dependency injection in MauiProgram.cs. I tried it but I am not sure why it isn't working and how to make it work. Everywhere I look they all have a Interface. I don't have it and just want to call this Dialog Fragment when the MainPage is created (in my case it is SignInPage)

This is the AndroidInitializer:

    public class AndroidInitializer {
        public MainActivity MainActivity { get; }

        public AndroidInitializer() {

        }

        public AndroidInitializer(MainActivity mainActivity) {

            MainActivity = mainActivity;
        }
//using prism I connect the AndroidNotificationService to INotificationService so I can call the Notification (dialog fragment)
        public void RegisterTypes(IContainerRegistry containerRegistry) {
            containerRegistry.RegisterInstance(typeof(INotificationService), new AndroidNotificationService(Android.App.Application.Context, MainActivity));
        }
    }

This is MauiProgram.cs

public static class MauiProgram {
    public static MauiApp CreateMauiApp() {
        var builder = MauiApp.CreateBuilder();
        builder
            .UsePrismApp<App>(PrismStartup.Configure)
            .UseBarcodeReader()
            .UseSkiaSharp()
            .ConfigureFonts(fonts => {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");

                fonts.AddFont("Font Awesome 6 Brands-Regular-400", "Font Awesome 6 Brands-Regular-400");
                fonts.AddFont("Font Awesome 6 Free-Regular-400", "Font Awesome 6 Free-Regular-400");
                fonts.AddFont("Font Awesome 6 Free-Solid-400", "Font Awesome 6 Free-Solid-400");
            });
#if ANDROID
        builder.Services.AddTransient<AndroidInitializer>();
#endif

        return builder.Build();
    }
}

This is PrismStartup.cs for starting the app as a prism app

internal static class PrismStartup {

    public static void Configure(PrismAppBuilder builder) {
        builder.RegisterTypes(RegisterTypes)
                .OnAppStart("NavigationPage/SignInPage");
    }

    private static void RegisterTypes(IContainerRegistry containerRegistry) {
        containerRegistry.RegisterForNavigation<SignInPage>()
                     .RegisterInstance(SemanticScreenReader.Default);
#if ANDROID
        containerRegistry.Register<AndroidInitializer>();
#endif
    }

}

This is the MainActivity.cs from Xamarin.Forms.

    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 
{	
	protected override void OnCreate(Bundle bundle) 
{            
		base.OnCreate(bundle);
		LoadApplication(new App(new AndroidInitializer(this)));
	}
}
.NET MAUI
.NET MAUI
A Microsoft open-source framework for building native device applications spanning mobile, tablet, and desktop.
4,078 questions
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.