到現在爲止,我開始在我的應用程序的開始LoginScreen(閃後):MonoDroid&MVVMCross - StartApplicationObject,啓動PreferenceActivity?
public class StartApplicationObject
: MvxApplicationObject
, IMvxStartNavigation
{
public void Start()
{
//this.RequestNavigate<AddressSearchViewModel>();
//this.RequestNavigate<MainScreenViewModel>();
this.RequestNavigate<LoginViewModel>();
}
public bool ApplicationCanOpenBookmarks
{
get { return true; }
}
}
好了,現在我需要改變。在這LoginView我從Web服務填充數據。 這意味着,我已經需要設置Web服務Url(在我的情況下在PreferenceActivity中)。
所以我想要PreferenceScreen,作爲StartView/Activity(不是Login One Anymore)。
的PreferenceActivity:
[Activity]
public class SettingsShowActivity : PreferenceActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
AddPreferencesFromResource(Resource.Xml.PreferenceScreen);
}
}
我不知道如何去完成這個任務,因爲PreferenceScreen沒有一個視圖模型,因此如何調用該活動StartApplicationObject.cs
,或者我需要一個解決方法嗎? 也許我還應該補充說,我需要能夠,以後從PreferenceActivity導航到LoginView(模型)..以及在這種情況下......如何做到這一點?
任何幫助,將不勝感激!
編輯:
THX斯圖爾特的答案!我想你的第二個方法 - 創造我自己的MvxPreferenceActivity。它看起來像:
using System;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Preferences;
using Cirrious.MvvmCross.Android.Interfaces;
using Cirrious.MvvmCross.ExtensionMethods;
using Cirrious.MvvmCross.Interfaces.ServiceProvider;
using Cirrious.MvvmCross.Interfaces.ViewModels;
using Cirrious.MvvmCross.Platform.Diagnostics;
namespace INMobileCRM4Android
{
public abstract class MvxPreferenceActivity<TViewModel>
: PreferenceActivity
, IMvxAndroidView<TViewModel>
, IMvxServiceConsumer<IMvxIntentResultSink>
where TViewModel : class, IMvxViewModel
{
protected MvxPreferenceActivity()
{
IsVisible = true;
}
#region Common code across all android views - one case for multiple inheritance?
private TViewModel _viewModel;
public Type ViewModelType
{
get { return typeof(TViewModel); }
}
public bool IsVisible { get; private set; }
public TViewModel ViewModel
{
get { return _viewModel; }
set
{
_viewModel = value;
OnViewModelSet();
}
}
public void MvxInternalStartActivityForResult(Intent intent, int requestCode)
{
base.StartActivityForResult(intent, requestCode);
}
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
this.OnViewCreate();
}
protected override void OnDestroy()
{
this.OnViewDestroy();
base.OnDestroy();
}
protected override void OnNewIntent(Intent intent)
{
base.OnNewIntent(intent);
this.OnViewNewIntent();
}
protected abstract void OnViewModelSet();
protected override void OnResume()
{
base.OnResume();
IsVisible = true;
this.OnViewResume();
}
protected override void OnPause()
{
this.OnViewPause();
IsVisible = false;
base.OnPause();
}
protected override void OnStart()
{
base.OnStart();
this.OnViewStart();
}
protected override void OnRestart()
{
base.OnRestart();
this.OnViewRestart();
}
protected override void OnStop()
{
this.OnViewStop();
base.OnStop();
}
public override void StartActivityForResult(Intent intent, int requestCode)
{
switch (requestCode)
{
case (int)MvxIntentRequestCode.PickFromFile:
MvxTrace.Trace("Warning - activity request code may clash with Mvx code for {0}", (MvxIntentRequestCode)requestCode);
break;
default:
// ok...
break;
}
base.StartActivityForResult(intent, requestCode);
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
this.GetService<IMvxIntentResultSink>().OnResult(new MvxIntentResultEventArgs(requestCode, resultCode, data));
base.OnActivityResult(requestCode, resultCode, data);
}
#endregion
}
}
但我不斷收到以下錯誤:
'INMobileCRM4Android.MvxPreferenceActivity<TViewModel>' does not contain a definition for 'OnViewPause' and no extension method 'OnViewPause' accepting a first argument of type 'INMobileCRM4Android.MvxPreferenceActivity<TViewModel>' could be found (are you missing a using directive or an assembly reference?)
而且還重複了這個錯誤:this.OnViewCreate(); ,this.OnViewNewIntent(); ,this.OnViewNewIntent(); ,this.OnViewResume(); ,this.OnViewStart(); ,this.OnViewRestart();和this.OnViewStop();
和結束時,還有其他3個錯誤:
No overload for method 'OnViewCreate' takes 0 arguments
對於OnViewCreate()和OnViewNewIntent()..
我把代碼你,因爲它是 - 但似乎有些事情不存在?
嗨,斯圖爾特,我剛剛編輯了我的問題 – eMi
儘量避免這種事情,如果可以的話 - 它會混淆這個問題,併爲任何後來的人回答。如果您需要提出一個新問題,請在新問題中進行回答(並返回到舊問題。如果您需要聊天,請http://jabbr.net/#/rooms/mvvmcross – Stuart
我對此編輯的回答是做編譯器告訴你檢查你的'using'語句和你的引用,以便這些擴展方法變得可見。 – Stuart