プログラミング

Xamarin.FormsのMasterDetailPageでバックキーを押すと例外を吐く

tsoft_writericon

結論: プレリリース版を入れよう

環境

Visual Studio 2017
Xamarin 4.3.0.784
Xamarin.Forms 2.3.3.193
Android 5.0

内容

MasterDetailPageを表示した状態で、バックキーを押すと以下の例外が表示されます。

03-15 23:46:54.359 I/MonoDroid( 3553): Java.Lang.IllegalStateException: Activity has been destroyed
03-15 23:46:54.359 I/MonoDroid( 3553):   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/4009/f3074d2c/source/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143
…
03-15 23:46:54.359 I/MonoDroid( 3553): java.lang.IllegalStateException: Activity has been destroyed
03-15 23:46:54.359 I/MonoDroid( 3553):  at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1515)
03-15 23:46:54.359 I/MonoDroid( 3553):  at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:638))

回避策

現段階(2017年3月16日)だと、修正された正式版のXamarin.Formsは公開されていないようです。

ただし、プレリリース版(2.3.4)では随分と前に修正されているので、NuGetからプレリリース版をインストールします。

  1. NuGetパッケージマネージャーを開きます
  2. プレリリースを含めるにチェックを入れます
  3. 「Xamarin.Forms」を探して選択します
  4. バージョンから2.3.3より新しいバージョン(画像だと2.3.4.214-pre5)を選択して、更新を押す
  5. クリーンを実行した後(重要)にビルドする。

リンク

46494 - Hardware/Software back button from MainPage of type MasterDetail causes crash 'java.lang.IllegalStateException: Activity has been destroyed'
https://bugzilla.xamarin.com/show_bug.cgi?id=46494

-プログラミング
-