diff --git a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj index 1654d20c80..516acfe4b9 100644 --- a/samples/ControlCatalog.Android/ControlCatalog.Android.csproj +++ b/samples/ControlCatalog.Android/ControlCatalog.Android.csproj @@ -21,9 +21,23 @@ True - True + False True + + + False + False + + + + True + + + + + + diff --git a/samples/ControlCatalog.Android/MainActivity.cs b/samples/ControlCatalog.Android/MainActivity.cs index 137f280e43..b02083c39d 100644 --- a/samples/ControlCatalog.Android/MainActivity.cs +++ b/samples/ControlCatalog.Android/MainActivity.cs @@ -5,7 +5,7 @@ using Avalonia.Android; namespace ControlCatalog.Android { - [Activity(Label = "ControlCatalog.Android", Theme = "@style/MyTheme.NoActionBar", Icon = "@drawable/icon", LaunchMode = LaunchMode.SingleInstance)] + [Activity(Label = "ControlCatalog.Android", Theme = "@style/MyTheme.NoActionBar", Icon = "@drawable/icon", LaunchMode = LaunchMode.SingleInstance, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] public class MainActivity : AvaloniaActivity { protected override void OnCreate(Bundle? savedInstanceState) @@ -16,4 +16,3 @@ namespace ControlCatalog.Android } } } - diff --git a/samples/ControlCatalog.Android/Resources/values/styles.xml b/samples/ControlCatalog.Android/Resources/values/styles.xml index e017b6facf..2759d2904a 100644 --- a/samples/ControlCatalog.Android/Resources/values/styles.xml +++ b/samples/ControlCatalog.Android/Resources/values/styles.xml @@ -4,7 +4,7 @@ - diff --git a/src/Android/Avalonia.Android/Avalonia.Android.csproj b/src/Android/Avalonia.Android/Avalonia.Android.csproj index b774938a1d..6e0b615626 100644 --- a/src/Android/Avalonia.Android/Avalonia.Android.csproj +++ b/src/Android/Avalonia.Android/Avalonia.Android.csproj @@ -7,6 +7,15 @@ + + + + + + + False + False + diff --git a/src/Android/Avalonia.Android/AvaloniaActivity.cs b/src/Android/Avalonia.Android/AvaloniaActivity.cs index 3c9f373a66..fbadc257e2 100644 --- a/src/Android/Avalonia.Android/AvaloniaActivity.cs +++ b/src/Android/Avalonia.Android/AvaloniaActivity.cs @@ -1,35 +1,55 @@ using Android.App; using Android.OS; using Android.Views; +using Android.Content.PM; +using AndroidX.AppCompat.App; +using Android.Content.Res; +using AndroidX.Lifecycle; namespace Avalonia.Android { - public abstract class AvaloniaActivity : Activity + public abstract class AvaloniaActivity : AppCompatActivity { internal AvaloniaView View; - object _content; - + internal AvaloniaViewModel _viewModel; protected override void OnCreate(Bundle savedInstanceState) { View = new AvaloniaView(this); - if (_content != null) - View.Content = _content; SetContentView(View); + + _viewModel = new ViewModelProvider(this).Get(Java.Lang.Class.FromType(typeof(AvaloniaViewModel))) as AvaloniaViewModel; + + if (_viewModel.Content != null) + { + View.Content = _viewModel.Content; + } + base.OnCreate(savedInstanceState); } - public object Content { get { - return _content; + return _viewModel.Content; } set { - _content = value; + _viewModel.Content = value; if (View != null) View.Content = value; } } + + public override void OnConfigurationChanged(Configuration newConfig) + { + base.OnConfigurationChanged(newConfig); + } + + protected override void OnDestroy() + { + View.Content = null; + + base.OnDestroy(); + } } } diff --git a/src/Android/Avalonia.Android/AvaloniaViewModel.cs b/src/Android/Avalonia.Android/AvaloniaViewModel.cs new file mode 100644 index 0000000000..1b2c00987a --- /dev/null +++ b/src/Android/Avalonia.Android/AvaloniaViewModel.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Avalonia.Android +{ + internal class AvaloniaViewModel : AndroidX.Lifecycle.ViewModel + { + public object Content { get; set; } + } +}