2017-04-07 60 views
-1

我正在開發一個使用c#的android應用程序,我的問題是當我在按鈕事件之外更改菜單項的標題時,在Oncreate方法中,我得到的是SystemNullReference excepetion但我可以在按鈕點擊事件中完成,而不會出現excel。我想要做的就是更改Oncreate method中的項目標題,以便在應用程序啓動時直接更改項目標題。我到目前爲止:更改菜單項的標題時獲取systemNullReference exceletion - Android

private IMenu menu; 
    public override bool OnCreateOptionsMenu(IMenu menu) 
    { 
     this.menu = menu; 
     MenuInflater.Inflate(Resource.Menu.menu, menu); 
     return base.OnPrepareOptionsMenu(menu); 
    } 
protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     SetContentView(Resource.Layout.Main); 
     Button button = FindViewById<Button>(Resource.Id.button1); 
     button.Click += delegate 
     { 
      IMenuItem about = menu.FindItem(Resource.Id.About); // Everything is working on the button click 
      about.SetTitle("About); 
     }; 
     if (selected == "English") // selected is a string value saved in Shared Preference 
     { 
      IMenuItem about = menu.FindItem(Resource.Id.About); // here where I am getting the SystemNullReference excepetion 
      about.SetTitle("About); 
     } 
     } 

爲什麼我有這個例外,以及如何解決這個問題? 在此先感謝..

+3

不太瞭解android,但我猜'OnCreateOptionsMenu'被稱爲_after_'OnCreate',所以在'OnCreate'中,'menu'仍然是'null'。你可以嘗試改變'OnCreateOptionsMenu'中的標題而不是'OnCreate'嗎?它在按鈕處理程序中工作,因爲只有在單擊按鈕時纔會執行,而不是在執行'OnCreate'時直接執行。 –

回答

0

移動這部分代碼:

if (selected == "English") // selected is a string value saved in Shared Preference 
    { 
     IMenuItem about = menu.FindItem(Resource.Id.About); // here where I am getting the SystemNullReference excepetion 
     about.SetTitle("About); 
    } 

OnCreateOptionsMenureturn語句結束。

你應該這樣做,因爲你在初始化的OnCreateOptionsMenuprivate IMenu menu;值,這是OnCreate()後調用,而您使用的是OnCreateprivate IMenu menu;,而這是迄今爲止尚未初始化。