我正在使用 Xamarin 和 MvvmCross 编写 monodroid 应用程序。
我想在我的应用程序中同时使用 MvvmCross 和 ActionBar。ActionBar(Legacy 或 Sherlock)强迫我从他们的自定义活动中继承。在这种情况下,我无法从 MvxActivity 和 CustomBarActivity 继承我的 Activity。
如何使用 MvxActivity 显示操作栏?
我正在使用 Xamarin 和 MvvmCross 编写 monodroid 应用程序。
我想在我的应用程序中同时使用 MvvmCross 和 ActionBar。ActionBar(Legacy 或 Sherlock)强迫我从他们的自定义活动中继承。在这种情况下,我无法从 MvxActivity 和 CustomBarActivity 继承我的 Activity。
如何使用 MvxActivity 显示操作栏?
我以类似 Mvx 的方式实现 Actionbar 所做的是,我在我的 TabActivity 中创建了一个属性,以便我可以访问我的 ViewModel。在我的 ViewModel 中,我有一个可以枚举和创建的操作栏元素列表。我敢肯定有更多类似 MvvMcross 的方法来实现操作栏(问 stuart),但这对我来说很好用。不要忘记让您的活动从 TabActivity 继承。
财产:
protected MvvMAppiAppi.Core.ViewModels.NavigationBarViewModel NavigationBarViewModel {
get{ return base.ViewModel as MvvMAppiAppi.Core.ViewModels.NavigationBarViewModel; }
}
代码:
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.view_NavigationBar);
//TabHost.TabSpec spec;
Intent intent;
foreach (var item in NavigationBarViewModel.MenuTabs) {
switch (item.PresentationMode) {
case "listByCategory":
{
var vm = NavigationBarViewModel.ListPresentationViewModel;
vm.CategorieId = item.id;
intent = this.CreateIntentFor (vm);
}
break;
...
...
...
...
}
intent.AddFlags (ActivityFlags.NewTask);
setUpTab (intent, item.Name, ResourceManager.I.getResId (item.ResourceName));
}
创建选项卡的功能:
private void setUpTab (Intent view, string tag, int Resource)
{
View tabview = createTabView (this.TabHost.Context, tag, Resource);
TabHost.TabSpec spec = this.TabHost.NewTabSpec (tag).SetIndicator (tabview).SetContent (view);
this.TabHost.AddTab (spec);
}
private View createTabView (Context context, String text, int resource)
{
View view = LayoutInflater.From (context).Inflate (Resource.Layout.tabs_bg, null);
TextView tv = view.FindViewById<TextView> (Resource.Id.tabsText);
ImageView iv = view.FindViewById<ImageView> (Resource.Id.image);
iv.SetImageResource (resource);
tv.SetText (text, TextView.BufferType.Normal);
return view;
}