我正在关注片段here的教程,但不幸的是,本教程没有展示如何将图标放入菜单栏。
我假设我可以在OnCreateOptionsMenu方法中使用MenuInflater,但是当我在那里进行调试时,我的代码似乎永远不会被命中。
以下是目前的情况:
public class MainView : MvxTabsFragmentActivity
{
public MainViewModel MainViewModel
{
get { return (MainViewModel)base.ViewModel; }
}
public MainView()
: base(Resource.Layout.Main, Resource.Id.realtabcontent)
{
}
public override bool OnCreateOptionsMenu(IMenu menu) {
MenuInflater.Inflate (Resource.Menu.main, menu);
return true;
}
protected override void OnCreate (Bundle savedInstanceState)
{
RequestWindowFeature(WindowFeatures.NoTitle);
base.OnCreate (savedInstanceState);
}
protected override void AddTabs(Bundle args)
{
AddTab<HomeView>("home", "", args, MainViewModel.Home);
AddTab<ProfileView>("profile", "", args, MainViewModel.StartOrder);
AddTab<CatalogView>("catalog", "", args, MainViewModel.Catalog);
AddTab<CheckoutView>("checkout", "", args, MainViewModel.Checkout);
AddTab<OrderHistoryView>("history", "", args, MainViewModel.OrderHistory);
}
}
我在这里遗漏了什么吗?是否有不同的方法来设置选项卡上的图标?一切都显示出来并正确导航,我只有空白标签......
谢谢!
答案 0 :(得分:1)
我不确定OnCreateOptionsMenu
与设置标签上的图标有什么关系 - 仅仅是为了“右击”或“按住”菜单?
如果您想使用也有图标的TabSpec,也许可以考虑使用其他AddTab
覆盖,以便传入完整的TabSpec
// this is the call you are currently using
protected void AddTab<TFragment>(string tagAndSpecName, string tabName, Bundle args,
IMvxViewModel viewModel)
{
var tabSpec = this._tabHost.NewTabSpec(tagAndSpecName).SetIndicator(tabName);
AddTab<TFragment>(args, viewModel, tabSpec);
}
// this is the call you could use instead
protected void AddTab<TFragment>(Bundle args, IMvxViewModel viewModel, TabHost.TabSpec tabSpec)
{
var tabInfo = new TabInfo(tabSpec.Tag, typeof (TFragment), args, viewModel);
AddTab(this, _tabHost, tabSpec, tabInfo);
_lookup.Add(tabInfo.Tag, tabInfo);
}
e.g。
var tabHost = (TabHost) FindViewById(Android.Resource.Id.TabHost);
var tabSpec = this.tabHost.NewTabSpec("home").SetIndicator("Home", Resource.Id.MyHomeIcon);
AddTab<HomeView>(args, MainViewModel.Home, tabSpec);
虽然显然最后两行可以通过辅助方法减少到一行。