Skip to content

Instantly share code, notes, and snippets.

@codedebugrepeat
Created June 29, 2017 09:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codedebugrepeat/788c13237c8fb7b6e8e60eeb71cdc858 to your computer and use it in GitHub Desktop.
Save codedebugrepeat/788c13237c8fb7b6e8e60eeb71cdc858 to your computer and use it in GitHub Desktop.
Xamarin Android Activity BaseClass for embedding MonoGame Animations
using Android.App;
using Android.Content;
using Android.OS;
using Cirrious.CrossCore.Core;
using Cirrious.CrossCore.Droid.Views;
using Cirrious.MvvmCross.Binding.BindingContext;
using Cirrious.MvvmCross.Binding.Droid.BindingContext;
using Cirrious.MvvmCross.Droid.Views;
using Cirrious.MvvmCross.ViewModels;
using Cirrious.MvvmCross.Views;
using Microsoft.Xna.Framework;
using System;
namespace Xamarin.MonoGame.Views {
public class BindableMonogameActivity<TViewModel> : AndroidGameActivity, IMvxAndroidView<TViewModel>, IMvxEventSourceActivity where TViewModel : class, IMvxViewModel {
public BindableMonogameActivity() {
BindingContext = new MvxAndroidBindingContext(this, this);
this.AddEventListeners();
}
protected override void OnCreate(Bundle bundle) {
CreateWillBeCalled.Raise(this, bundle);
base.OnCreate(bundle);
CreateCalled.Raise(this, bundle);
}
protected override void OnDestroy() {
DestroyCalled.Raise(this);
base.OnDestroy();
}
protected override void OnNewIntent(Intent intent) {
base.OnNewIntent(intent);
NewIntentCalled.Raise(this, intent);
}
protected override void OnResume() {
base.OnResume();
ResumeCalled.Raise(this);
}
protected override void OnPause() {
PauseCalled.Raise(this);
base.OnPause();
}
protected override void OnStart() {
base.OnStart();
StartCalled.Raise(this);
}
protected override void OnRestart() {
base.OnRestart();
RestartCalled.Raise(this);
}
protected override void OnStop() {
StopCalled.Raise(this);
base.OnStop();
}
public override void StartActivityForResult(Intent intent, int requestCode) {
StartActivityForResultCalled.Raise(this, new MvxStartActivityForResultParameters(intent, requestCode));
base.StartActivityForResult(intent, requestCode);
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) {
ActivityResultCalled.Raise(this, new MvxActivityResultParameters(requestCode, resultCode, data));
base.OnActivityResult(requestCode, resultCode, data);
}
protected override void OnSaveInstanceState(Bundle outState) {
SaveInstanceStateCalled.Raise(this, outState);
base.OnSaveInstanceState(outState);
}
protected override void Dispose(bool disposing) {
if (disposing) {
DisposeCalled.Raise(this);
}
base.Dispose(disposing);
}
public event EventHandler<MvxValueEventArgs<MvxActivityResultParameters>> ActivityResultCalled;
public event EventHandler<MvxValueEventArgs<Bundle>> CreateCalled;
public event EventHandler<MvxValueEventArgs<Bundle>> CreateWillBeCalled;
public event EventHandler DestroyCalled;
public event EventHandler<MvxValueEventArgs<Intent>> NewIntentCalled;
public event EventHandler PauseCalled;
public event EventHandler RestartCalled;
public event EventHandler ResumeCalled;
public event EventHandler<MvxValueEventArgs<Bundle>> SaveInstanceStateCalled;
public event EventHandler<MvxValueEventArgs<MvxStartActivityForResultParameters>> StartActivityForResultCalled;
public event EventHandler StartCalled;
public event EventHandler StopCalled;
public event EventHandler DisposeCalled;
public IMvxViewModel ViewModel {
get { return DataContext as IMvxViewModel; }
set {
DataContext = value;
OnViewModelSet();
}
}
public object DataContext {
get { return BindingContext.DataContext; }
set { BindingContext.DataContext = value; }
}
public void MvxInternalStartActivityForResult(Intent intent, int requestCode) {
base.StartActivityForResult(intent, requestCode);
}
public IMvxBindingContext BindingContext { get; set; }
public override void SetContentView(int layoutResId) {
var view = this.BindingInflate(layoutResId, null);
SetContentView(view);
}
protected virtual void OnViewModelSet() {
}
// in MvxActivity, this is implemented. However, can't use that as MvxContextWrapper is not known.
//protected override void AttachBaseContext(Context @base) {
// if (this is IMvxAndroidSplashScreenActivity) {
// // Do not attach our inflater to splash screens.
// base.AttachBaseContext(@base);
// return;
// }
// base.AttachBaseContext(MvxContextWrapper.Wrap(@base, this));
//}
TViewModel IMvxView<TViewModel>.ViewModel {
get {
return ViewModel as TViewModel;
}
set {
ViewModel = value;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment