Xamarin.Android中ActionBar抛出NullReferenceException

1、说明

在使用Xamarin.Android的ActionBar时

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    SetContentView(Resource.Layout.activity_main);
   
    this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;

    Android.App.ActionBar.Tab tab = ActionBar.NewTab();
    tab.SetText("选项1");
    //tab.SetIcon(Resource.Drawable.tab1_icon);
    tab.TabSelected += (sender, args) => {
        // Do something when tab is selected
    };
    ActionBar.AddTab(tab);

    tab = ActionBar.NewTab();
    tab.SetText("选项2");
    //tab.SetIcon(Resource.Drawable.tab2_icon);
    tab.TabSelected += (sender, args) => {
        // Do something when tab is selected
    };
    ActionBar.AddTab(tab);
}

this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;抛出System.NullReferenceException异常。如下图所示:
异常图片

2、常见的方案

晚上有一些解决异常的方案,例如,将主题删除

[Activity(Label = "@string/app_name", Theme = "@style/Theme.AppCompat", MainLauncher = true)]
public class MainActivity : Activity
{
}

即,将Theme = "@style/Theme.AppCompat",进行删除。这篇博主的文章就是这样处理的,是ok的。博客链接

还有一些是因为选择的Theme是不支持ActionBar的。例如,有的主题是Theme = "@android:style/Theme.NoTitleBar"。因此需要将这主题进行删除。StackOverflow网站上有人反映过这个问题。stackoverflow异常解决

3、背后的原理

最根本的原因是:ActionBarNavigationMode.TabsAPI21,即Android 5.0删除了,导致根本不支持。所以解决方案有如下几个:
1、开发版本支持API21以下
2、不使用ActionBar,使用工具栏(Toolbar )。微软官网上的教程如下:官网的教程
3、使用TabLayout进行替换。参考资料:使用tablayout

以上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值