c# – Xamarin选项卡导致System.NullReferenceException
发布时间:2020-12-15 23:22:47 所属栏目:百科 来源:网络整理
导读:我正在尝试在我的Xamarin Android应用程序中实现简单的选项卡界面. 我的活动: using System;using Android.App;using Android.Content;using Android.Runtime;using Android.Views;using Android.Widget;using Android.OS;namespace SSMobile{ [Activity (L
我正在尝试在我的Xamarin
Android应用程序中实现简单的选项卡界面.
我的活动: using System; using Android.App; using Android.Content; using Android.Runtime; using Android.Views; using Android.Widget; using Android.OS; namespace SSMobile { [Activity (Label = "Tabs",MainLauncher = false,Icon = "@drawable/icon",Theme = "@android:style/Theme.NoTitleBar")] public class MainActivity : Activity { protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs; SetContentView (Resource.Layout.Main); AddTab ("Panic",Resource.Drawable.tab_icon,new PanicFragment ()); AddTab ("Diagnostics",new DiagnosticsFragment ()); AddTab ("Config",new ConfigFragment ()); } protected override void OnSaveInstanceState(Bundle outState) { outState.PutInt("tab",this.ActionBar.SelectedNavigationIndex); base.OnSaveInstanceState(outState); } void AddTab (string tabText,int iconResourceId,Fragment view) { var tab = this.ActionBar.NewTab (); tab.SetText (tabText); tab.SetIcon (Resource.Drawable.tab_icon); // must set event handler before adding tab tab.TabSelected += delegate(object sender,ActionBar.TabEventArgs e) { var fragment = this.FragmentManager.FindFragmentById(Resource.Id.fragmentContainer); if (fragment != null) e.FragmentTransaction.Remove(fragment); e.FragmentTransaction.Add (Resource.Id.fragmentContainer,view); }; tab.TabUnselected += delegate(object sender,ActionBar.TabEventArgs e) { e.FragmentTransaction.Remove(view); }; this.ActionBar.AddTab (tab); } class PanicFragment: Fragment { public override View OnCreateView (LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { base.OnCreateView (inflater,container,savedInstanceState); var view = inflater.Inflate (Resource.Layout.PanicFragment,false); return view; } } class DiagnosticsFragment: Fragment { public override View OnCreateView (LayoutInflater inflater,savedInstanceState); var view = inflater.Inflate (Resource.Layout.DiagnosticsFragment,false); return view; } } class ConfigFragment: Fragment { public override View OnCreateView (LayoutInflater inflater,savedInstanceState); var view = inflater.Inflate (Resource.Layout.ConfigFragment,false); return view; } } } } 当我的应用程序打开该活动时,我收到错误:
在这条线上: this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs; 异常日志: System.NullReferenceException: Object reference not set to an instance of an object at SSMobile.MainActivity.OnCreate (Android.OS.Bundle) [0x00009] in c:UsersdarekDocumentsProjectsSSMobileSSMobileMainActivity.cs:17 at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) [0x00011] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.21-series/49a04b96/source/monodroid/src/Mono.Android/platforms/android-15/src/generated/Android.App.Activity.cs:1944 at at (wrapper dynamic-method) object.3a5a286c-d028-4989-a49e-efabfb6b0ae6 (intptr,intptr) <IL 0x00017,0x0001f> 这段代码有什么问题? 解决方法
我找到了我无法使用ActionBar的原因.
在我的活动中,我使用隐藏TitleBar的Theme: Theme = "@android:style/Theme.NoTitleBar" 这也使得ActionBar隐藏起来并且不可用. this.ActionBar.SetDisplayShowHomeEnabled (false); this.ActionBar.SetDisplayShowTitleEnabled (false); 它会隐藏应用程序图标和标题. 希望它能为您节省几个小时的搜索时间:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |